1、查询表内所有数据
SELECT * FROM 表名
2、where 条件约束声明查询
SELECT * FROM 表名 WHERE XXX = 'XXX';
3、and 当两个布尔表达式都为true时,返回true
SELECT * FROM 表名 WHERE XXX = 'XXX' AND xx = 'xx';
4、or 当两个布尔表达式有一个为true时,返回true
SELECT * FROM 表名 WHERE (a > 1 OR b > 1) AND status = 0;
5、模糊查询
查询Key结尾的内容
SELECT * FROM 表明 WHERE a = 1 LIKE '%Key'
查询Key开头的内容
SELECT * FROM 表明 WHERE a = 1 LIKE 'Key%'
查询含有Key的内容
SELECT * FROM 表明 WHERE a = 1 LIKE '%Key%'
6、having使用
having子句可以让我们筛选成组后的各组数据,通常与group by分组一起使用
查询2022年至今,所有学生成绩超过60的科目数量
SELECT name, count(score) FROM 表明
WHERE date >= '2022-01-01'
GROUP BY name having count(score) >= 60
(1)where和having的区别
where:
where是一个约束声明,使用where来约束来自数据库的数据;
where是在结果返回之前起作用的;
where中不能使用聚合函数。
having:
having是一个过滤声明;
在查询返回结果集以后,对查询结果进行的过滤操作;
在having中可以使用聚合函数。
where不能使用聚合函数、having中可以使用聚合函数
聚合函数就是例如:SUM, COUNT, MAX, AVG等
where子句在聚合前先筛选记录,也就是说作用在group by 子句和having子句前,而 having子句在聚合后对组记录进行筛选
(2)having能否单独使用
跟数据库有关系,测试了常用的三个数据库,结果是Oracle和postgresql不能,mysql可以
7、内连接查询
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
SELECT a.name, b.score FROM 表1 a INNER JOIN 表2 b ON a.name = b.name;
8、多表关联查询(等值连接)
查询学生成绩大于60的分数
SELECT a.name,b.score FROM 表1 AS a, 表2 AS b
WHERE a.id = b.id AND b.score > 60;
9、左外连接查询
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据
SELECT a.name, b.score FROM 表1 a LEFT JOIN 表2 b ON a.name = b.name;
10、右外连接查询
RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据
SELECT a.name, b.score FROM 表1 a RIGHT JOIN 表2 b ON a.name = b.name;
11、插入
INSERT INTO 表名(字段名) VALUES (值)
INSERT INTO t_student(s_name,s_class,s_birthday,s_grade,s_sex)
VALUES(‘张无忌’,‘j171’,‘2020-09-22’,78,‘女’),
(‘张青峰’,‘j170’,‘2020-09-23’,67,‘女’);
12、删除
DELETE FROM 表名 WHERE 条件是什么
DELETE FROM t_employee
WHERE pk_id
NOT IN (SELECT * FROM(SELECT MIN(pk_id)
FROM t_employee
GROUP BY e_name,e_dept,e_money) X);
13、更改
UPDATE 表名 SET 设置更改的字段名以及值 WHERE 条件是什么
UPDATE t_student SETs_class=‘j111’,s_grade=92,s_birthday=‘2020-09-09’
WHERE s_name=‘张青峰’;