1、
%:是一个通配符,代表零个、一个或多个字符
a. 查找,以特定字符串开头的值:SELECT*FROM 表名 WHERE 列名 LIKE'前缀%';
b. 查找,以特定字符串结尾的值:SELECT*FROM 表名 WHERE 列名 LIKE'%后缀';
c. 查找,包含特定字符串的值:SELECT*FROM 表名 WHERE 列名 LIKE'%子字符串%';2、
_:是一个通配符,代表一个单一字符
a. 查找特定模式的值(例如,长度为 5 的字符串,其中第二个字符是 'a'),如下:
SELECT*FROM 表名 WHERE 列名 LIKE'_a___';
MySQL允许在 UPDATE 语句中,使用 LIMIT 子句来限制更新的记录数。
如:
UPDATE my_user SET pwd ='new_password'WHERE name LIKE'张%'LIMIT1;
这条语句,将只更新 name 列以"张"开头的第一条记录的pwd列的值。
注意
1、
WHERE 子句是 UPDATE 语句中非常重要的部分,因为它决定了哪些记录会被更新,
如果,没有正确地指定 WHERE 子句,
或者,完全省略了它,
那么,所有的记录都会被更新,这是一个严重的bug。
2、始终确保 SET 子句中的列名和值,与数据库中的实际情况相匹配。
删除
语法
语法:
DELETEFROM 表名 WHERE 条件;
解释:
DELETEFROM:表示要从哪个表中删除记录
WHERE:这是一个可选的子句,用于指定哪些记录应该被删除,
如果省略 WHERE 子句,将删除表中的所有记录
举例:
删除"my_user"表中,名为"张三"的用户记录,
DELETEFROM my_user WHERE name ='张三';
语法:
SELECT 列1, 列2,...FROM 表名
WHERE 条件;
解释:
SELECT:表示要执行查询操作;
列1, 列2,...:指定要从表中检索的列的名称;如果要选择所有列,可以使用 "*"通配符;
FROM:关键字,后面跟要查询数据的表的名称;
WHERE:关键字,后面跟条件表达式,用于过滤记录,WHERE 子句是可选的;
举例:
查询,所有用户的,姓名和电话号码:SELECT name, plone FROM my_user;
如果,只想查询名为"张三"的用户的信息:SELECT*FROM my_user WHERE name ='张三';
order by
ORDERBY:用于对查询结果进行排序。
LIMIT:用于限制返回的记录数。
查询,my_user表中,前10个用户的姓名,并按姓名升序排序
SELECT name
FROM my_user
ORDERBY name ASCLIMIT10;
GROUP BY having
GROUPBY:用于将结果集按一个或多个列进行分组。
HAVING:与 GROUPBY 一起使用,用于过滤分组后的结果。
解释:
GROUPBY 是 SQL 语言中的一个子句,
用于,将'查询结果'按照一个或多个列进行分组,
在每个分组内,你可以使用聚合函数(如 COUNT(),SUM(),AVG(),MAX(),MIN() 等)来计算每个组的统计信息。
having,用于,在分组之后过滤数据
举例:
返回staff表中,员工数量大于3的城市及其员工数量
SELECT city,count(*)as num
FROM staff
GROUPBY city
HAVING num >3;
join-内连接
1、
内连接,会返回,两个表中满足连接条件的行。
2、
内连接,通过'在ON子句中指定连接条件',来将两个表中的行连接起来,
只有当连接条件满足时,内连接才会返回匹配的行,
如果某个表中的行,在另一个表中没有匹配的行,则这些行不会出现在内连接的结果中。
语法:
SELECT*FROM TableA
INNERJOIN TableB
ON TableA.column_name = TableB.column_name;-- column_name:列名
举例:
Students表:
| student_id | student_name | course_id ||------------|--------------|-----------||1| Alice |101||2| Bob |102||3| Charlie |103|
Courses表:
| course_id | course_name ||-----------|-------------||101| Math ||102| Science ||104| History |
通过内连接,查询学生的姓名和所选课程的名称:
select Students.student_name, Courses.course_name
from Students
innerjoin Courses
on Students.course_id = Courses.course_id
执行结果为:
| student_name | course_name ||--------------|-------------|| Alice | Math || Bob | Science |
join-左连接
1、
左连接(LeftJoin),
它会返回,左表中的所有行,以及右表中满足连接条件的行,
如果右表中没有匹配的行,那么结果集中将会包含 NULL 值。
2、
左连接,常用于,需要保留左表中所有行的情况,即使,右表中没有匹配的行也要显示左表中的数据
语法:
SELECT*FROM TableA
LEFTJOIN TableB
ON TableA.column_name = TableB.column_name;'LEFT JOIN'表示进行左连接操作,
'ON TableA.column_name = TableB.column_name'表示连接条件,
左连接,将返回左表TableA中的所有行,以及右表TableB中满足连接条件的行,
如果,右表中没有匹配的行,对应的列将会显示 NULL 值。
举例:
Employees表:
| employee_id | employee_name | department_id ||-------------|---------------|--------------||1| Alice |101||2| Bob |102||3| Charlie |103||4| David |102|
Departments表:
| department_id | department_name ||---------------|-----------------||101| HR ||102| Marketing ||104| Finance |
通过,左连接,查询员工的姓名和所属部门的名称:
select Employees.employee_name, Departments.department_name
from Employees
leftjoin Departments
on Employees.department_id = Departments.department_id
执行结果为:
| employee_name | department_name ||---------------|-----------------|| Alice | HR || Bob | Marketing || Charlie |NULL|| David | Marketing |
解释:
Alice属于HR部门,Bob和David都属于Marketing部门,
而,Charlie的部门在Departments表中找不到对应的记录,因此在左连接的结果中显示为NULL,
左连接操作保留了Employees表中的所有员工信息,并将其与Departments表中匹配的部门信息进行连接。
join-右连接
1、
右连接(RightJoin),
它会返回右表中的所有行,以及左表中满足连接条件的行,
如果,左表中没有匹配的行,那么结果集中将会包含 NULL 值。
2、
右连接与左连接相反,
右连接,用于需要保留右表中所有数据的情况,即使,左表中没有匹配的数据也要显示右表中的数据
语法:
SELECT*FROM TableA
RIGHTJOIN TableB
ON TableA.column_name = TableB.column_name;'RIGHT JOIN'表示进行右连接操作,
'ON TableA.column_name = TableB.column_name'表示连接条件。
举例:
Students表:
| student_id | student_name | course_id ||------------|--------------|-----------||1| Alice |101||2| Bob |102||3| Charlie |103||4| David |NULL|
Courses表:
| course_id | course_name ||-----------|-------------||101| Math ||102| English ||104| History |
通过,右连接,查询学生的姓名和所选课程的名称:
select Students.student_name, Courses.course_name
from Students
rightjoin Courses
on Students.course_id = Courses.course_id
执行结果为:
| student_name | course_name ||--------------|-------------|| Alice | Math || Bob | English || Charlie |NULL||NULL| History |
解释:
Alice选择了Math课程,Bob选择了English课程,
Charlie的课程在Courses表中找不到对应的记录,
而,David在Students表中的course_id为NULL,因此,在右连接的结果中显示为NULL,
右连接操作保留了Courses表中的所有课程信息,并将其与Students表中匹配的学生信息进行连接
join-全连接
1、
全连接(FullJoin),
它会返回,左表和右表中的所有行,
同时,将满足连接条件的行,进行连接,
如果,某个表中没有匹配的行,对应的列将会显示 NULL 值。
2、
全连接,会返回左表和右表中的所有数据,无论是否有匹配的行,
如果,左表或右表中的某些行,在另一张表中没有匹配的行,那么对应的列将会显示 NULL 值。
语法:
SELECT*FROM TableA
FULLJOIN TableB
ON TableA.column_name = TableB.column_name;'FULL JOIN'表示进行全连接操作,
'ON TableA.column_name = TableB.column_name'表示连接条件,
全连接,将返回左表TableA和右表TableB中的所有行,并将满足连接条件的行进行连接,
如果,某个表中没有匹配的行,对应的列将会显示 NULL 值。
举例:
Employees表:
| employee_id | employee_name | department_id ||-------------|---------------|---------------||1| Alice |101||2| Bob |102||3| Charlie |103||4| David |NULL|
Departments表:
| department_id | department_name ||---------------|-----------------||101| HR ||102| Finance ||104| Marketing |
通过全连接,查询员工的姓名和所属部门的名称,即使有些员工的部门在Departments表中找不到对应的记录,或者有些部门没有员工。
select Employees.employee_name, Departments.department_name
from Employees
fulljoin Departments
on Employees.department_id = Departments.department_id
执行结果:
| employee_name | department_name ||---------------|-----------------|| Alice | HR || Bob | Finance || Charlie |NULL|| David |NULL||NULL| Marketing |
解释:
Alice属于HR部门,Bob属于Finance部门,
Charlie和David的部门,在Departments表中找不到对应的记录,
而,Marketing部门没有员工,
全连接操作,保留了Employees表 和 Departments表中的所有数据,并将其进行连接。
子查询
1、
子查询是指,在'SQL查询语句中嵌套另一个查询',
内部查询的结果,作为外部查询的条件之一,
子查询可以用于过滤数据、进行计算、比较值等各种操作。
举例:
Employees表:
| employee_id | employee_name | department_id | salary ||-------------|---------------|---------------|--------||1| Alice |101|60000||2| Bob |102|70000||3| Charlie |101|55000||4| David |103|75000|
Departments表:
| department_id | department_name ||---------------|-----------------||101| Sales ||102| Marketing ||103| Finance |
查询每个部门的平均工资,并找出,工资高于部门平均工资的员工
select Employees.salary, Employees.employee_name, Departments.department_name
from Employees e
join Departments d
on e.department_id = d.department_id
where e.salary >(selectAVG(salary)from Employees e2
where e2.department_id = e.department_id
)| salary | employee_name | department_name ||--------|---------------|------------- --||60000| Alice | Sales ||70000| Bob | Marketing |
例子
学生表Students:
| student_id | student_name | age ||------------|--------------|-----------||1| Alice |20||2| Bob |21||3| Charlie |19|
成绩表Scores:
| student_id | subject | score ||------------|--------------|-----------||1| Math |85||1| Science |90||2| Math |75||2| Science |80||3| Math |95||3| Science |88|
找出每个学生的平均分,并列出高于平均分的学生及其成绩:
select Students.student_id, Students.student_name, Scores.subject, Scores.score
from Students stu
join Scores s
on stu.student_id = s.student_id
where Scores.score >(selectAVG(score)from Scores
where student_id = s.student_id
)
随着人工智能技术的飞速发展,程序员的工作正迎来前所未有的变革。去年9月,《大西洋月刊》上的一篇文章,由Kelli Mara Korducki所著,直言不讳地指出:“在人工智能时代,计算机科学已不再是那个稳妥的专业选择…
Download and deployJenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their softwarehttps://www.jenkins.io/download/首先点击上面。下载Jenkins 为了学习,从windows开始&#x…