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___';
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;
WHERE:关键字,后面跟条件表达式,用于指定哪些记录应该被更新,
如果省略 WHERE 子句,将更新表中的所有记录,
这可是大bug
修改指定列的值
sql复制代码
将用户名为"张三"的用户的密码修改为"newpassword123":
UPDATE my_user SET pwd = 'newpassword123' WHERE name = '张三';
修改多个列的值
sql复制代码
将用户名为"张三"的用户的密码修改为"newpassword123",phone修改为"12345678910"
UPDATE my_user SET pwd = 'updatedpassword', plone = '12345678910' WHERE name = '张三';
根据条件修改
sql复制代码
将所有在2022年注册的用户的状态更新为"old_user"
UPDATE my_user SET status = 'old_user' WHERE YEAR(reg_time) = 2022;
与limit字句配合
sql复制代码
MySQL允许在 UPDATE 语句中,使用 LIMIT 子句来限制更新的记录数。
如:
UPDATE my_user SET pwd = 'new_password' WHERE name LIKE '张%' LIMIT 1;
这条语句,将只更新 name 列以"张"开头的第一条记录的pwd列的值。
注意
js复制代码
1、
WHERE 子句是 UPDATE 语句中非常重要的部分,因为它决定了哪些记录会被更新,
如果,没有正确地指定 WHERE 子句,
或者,完全省略了它,
那么,所有的记录都会被更新,这是一个严重的bug。
2、始终确保 SET 子句中的列名和值,与数据库中的实际情况相匹配。
删除
语法
sql复制代码
语法:
DELETE FROM 表名 WHERE 条件;
解释:
DELETE FROM:表示要从哪个表中删除记录
WHERE:这是一个可选的子句,用于指定哪些记录应该被删除,
如果省略 WHERE 子句,将删除表中的所有记录
举例:
删除"my_user"表中,名为"张三"的用户记录,
DELETE FROM 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
sql复制代码
ORDER BY:用于对查询结果进行排序。
LIMIT:用于限制返回的记录数。
查询,my_user表中,前10个用户的姓名,并按姓名升序排序
SELECT name
FROM my_user
ORDER BY name ASC
LIMIT 10;
GROUP BY having
sql复制代码
GROUP BY:用于将结果集按一个或多个列进行分组。
HAVING:与 GROUP BY 一起使用,用于过滤分组后的结果。
解释:
GROUP BY 是 SQL 语言中的一个子句,
用于,将'查询结果'按照一个或多个列进行分组,
在每个分组内,你可以使用聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN() 等)来计算每个组的统计信息。
having,用于,在分组之后过滤数据
举例:
返回staff表中,员工数量大于3的城市及其员工数量
SELECT city, count(*) as num
FROM staff
GROUP BY city
HAVING num > 3;
join-内连接
sql复制代码
1、
内连接,会返回,两个表中满足连接条件的行。
2、
内连接,通过'在ON子句中指定连接条件',来将两个表中的行连接起来,
只有当连接条件满足时,内连接才会返回匹配的行,
如果某个表中的行,在另一个表中没有匹配的行,则这些行不会出现在内连接的结果中。
语法:
SELECT *
FROM TableA
INNER JOIN 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
inner join Courses
on Students.course_id = Courses.course_id
执行结果为:
| student_name | course_name |
|--------------|-------------|
| Alice | Math |
| Bob | Science |
join-左连接
sql复制代码
1、
左连接(Left Join),
它会返回,左表中的所有行,以及右表中满足连接条件的行,
如果右表中没有匹配的行,那么结果集中将会包含 NULL 值。
2、
左连接,常用于,需要保留左表中所有行的情况,即使,右表中没有匹配的行也要显示左表中的数据
语法:
SELECT *
FROM TableA
LEFT JOIN 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
left join 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-右连接
sql复制代码
1、
右连接(Right Join),
它会返回右表中的所有行,以及左表中满足连接条件的行,
如果,左表中没有匹配的行,那么结果集中将会包含 NULL 值。
2、
右连接与左连接相反,
右连接,用于需要保留右表中所有数据的情况,即使,左表中没有匹配的数据也要显示右表中的数据
语法:
SELECT *
FROM TableA
RIGHT JOIN 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
right join 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表中匹配的学生信息进行连接