目的:任务做完发现sql基础不好,反省之后,重新学习一下:
参考:https://www.cnblogs.com/leskang/p/5922349.html
查询:
多表查询
连接查询:连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据;
1、内连接查询:
内连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表;
2、外连接查询
外连接可以查出某一张表的所有信息;
SELECT 属性名列表 FROM 表名 1 LEFT|RIGHT JOIN 表名 2 ON 表名 1.属性名 1=表名 2.属性名 2;
select u.user_name, u.user_sex, t.class_name from test_01 u right join test_class t
on u.class_id = t.class_id
模糊查询 LIKE:
模糊查询 LIKE:
SELECT 字段 1,字段 2,字段 3...FROM 表名 WHERE 字段 [NOT] LIKE ‘字符串’;
“%”代表任意字符;
“_” 代表单个字符;
空值查询 NOT NULL:
SELECT 字段 1,字段 2,字段 3...FROM 表名 WHERE 字段 IS [NOT] NULL;
SELECT 字段 1,字段 2,字段 3...FROM 表名 WHERE 字段 [NOT] LIKE ‘字符串’;
select * from test_01 t where t.user_name like '%李%'
排序 ORDER BY
SELECT 字段 1,字段 2...FROM 表名 ORDER BY 属性名 [ASC|DESC] //ASC升序(默认) DESC降序
select * from test_01 u order by u.user_id asc
去重复查询 DISTINCT :
SELECT DISTINCT 字段名 FROM 表名;
select distinct u.user_sex from test_01 u
子查询
1 、带 In 关键字的子查询
一个查询语句的条件可能落在另一个 SELECT 语句的查询结果中。
2 、带比较运算符的子查询
子查询可以使用比较运算符。
3 、带 (not)Exists 关键字的子查询
假如子查询查询到记录,则进行外层查询,否则,不执行外层查询;not exists表示内层没有内容时才查询外层
如:SELECT * from t_book where EXISTS(select * from t_booktype);//表示t_booktype中返回的有内容时才执行外层t_book的查询
4 、带 Any 关键字的子查询
ANY 关键字表示满足其中任一条件;如:SELECT * FROM t_book WHERE price>= ANY (SELECT price FROM t_pricelevel);//表示筛选价格大于任意t_pricelevel表中选出的价格的结果,即比最小的大的价格就满足条件
5 、带 All 关键字的子查询
ALL 关键字表示满足所有条件;如:SELECT * FROM t_book WHERE price>= ALL (SELECT price FROM t_pricelevel);//表示筛选价格大于所有t_pricelevel表中选出的价格的结果,即比最大的价格大的才满足条件
-------------------------------------------------------------------------------------------------------------------------
插入数据
- 给表的所有字段插入数据
格式:INSERT INTO 表名 VALUES(值 1,值 2,值 3,...,值 n);
- 给表的指定字段插入数据
格式:INSERT INTO 表名(属性 1,属性 2,...,属性 n) VALUES(值 1,值 2,值 3,...,值 n);
- 同时插入多条记录
INSERT INTO 表名 [(属性列表)] VALUES(取值列表 1),(取值列表 2) ..., (取值列表 n);
更新数据
UPDATE 表名 SET 属性名 1=取值 1,属性名 2=取值 2, ..., 属性名 n=取值 n WHERE 条件表达式;