SQL基本查询
查询:
SELECT *
FROM t_student t
WHERE t.STUNO=0001
删除:
DELETE FROM t_student
WHERE t_student.STUNO=0001
更新:
UPDATE t_student SET STUPWD="0003",STUNAME="cyt",STUSEX="nv",Teacher_id="0002",pri="3" WHERE STUNO="0001"
插入:
INSERT into t_student(STUNO,STUPWD,STUNAME,STUSEX,Teacher_id,pri)
VALUES("0001","0004","cyt","nan","0002","1")
LIKE:
模糊匹配: %代替任意字符,_代替单一字符
SELECT * FROM t_book WHERE book_price LIKE "%3%"
BETWEEN AND:
二者等价
SELECT * FROM t_book WHERE book_price BETWEEN 30 and 100
SELECT * FROM t_book WHERE book_price >=10 AND book_price <=100
IN: 判断某字段的值是否在IN列表中的某一项
SELECT * FROM t_book WHERE book_price=33 OR book_price=34
SELECT * FROM t_book WHERE book_price IN (33,34)
NULL OR NOT NULL:
判断某一字段是否为空
排序查询(ORDER BY):
SELECT 查询列表
FROM 表
WHERE 筛选条件
ORDER BY 排序列表 ASC|DESC
1.如果不写,默认是asc(升序)
2.order by 可以支持单个字段,多个字段,表达式,函数,别名
3.order by 一般放在查询语句的最后(除limit以外)
价格升序:
SELECT * FROM t_book ORDER BY book_price asc
价格降序:
SELECT * FROM t_book ORDER BY book_price desc
价格大于100并且 价格降序:
SELECT * FROM t_book WHERE book_price >=100 ORDER BY book_price asc
价格升序编号降序:
SELECT * FROM t_book ORDER BY id asc, book_price DESC
分组查询:
SUM求和,AVG平均,MAX,MIN,COUNT计数,DISTINCT(去重)
SELECT COUNT(DISTINCT book_price) FROM t_book
SELECT COUNT(DISTINCT(num)) FROM date
# 统计出num列的不重复列数
GROUP BY:
分组的意思就是按照GROUP BY后面的关键字,把数据分组。输出的字段必须在GROUP BY子句或者在聚合函数中,否则会报错的。
例子:按照性别分组,并统计出来数量。
SELECT s.STUSEX 性别,COUNT(*) 数量
from t_student s
GROUP BY s.STUSEX
执行顺序:查询出t_student表中的数据,并且按照性别分为两组。然后输出s.stusex,count(*)这两个字段。
例子:有多个分组条件
SELECT s.STUSEX 性别,s.pri 类别,COUNT(*) 数量
from t_student s
GROUP BY s.STUSEX,s.pri
执行顺序:按照性别、状态分组后输出性别、类别字段最后统计数量。
语法:
SELECT 分组函数,列(出现在GROUP BY的后面)
FROM 表
WHERE 筛选条件
GROUP BY 分组的列表
分组之前筛选:
SELECT MAX(s.pri) ,s.STUNAME,s.STUSEX
from t_student s
WHERE s.pri is not null
GROUP BY s.STUSEX
分组之后筛选:
SQL进阶
连接查询:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EOjodnWi-1597557499764)(1592787988590.png)]
等值连接查询:
SELECT 查询列表
FROM 表1 AS 别名,表2 AS 别名
WHERE 表1.key=表2.key
【AND 筛选条件】
【GROUP BY分组字段】
【HAVING 分组后的筛选】
【ORDER BY 排序字段】
01:
SELECT STUNAME, TEANAME
from t_student, t_teacher
WHERE t_student.Teacher_id= t_teacher.TEANO
使用表的别名:
SELECT STUNAME, TEANAME
from t_student as s, t_teacher as t
WHERE s.Teacher_id= t.TEANO
SELECT s.STUNAME, s.pri,t.TEANAME
from t_student s, t_teacher t
WHERE t.TEANO = s.Teacher_id and s.pri is not NULL
连接查询语法:
SELECT 查询列表
FROM 表1 别名 【连接类型】
JOIN 表2 别名
ON 连接条件
【WHERE 筛选条件】
【GROUP BY 分组】
【HAVING 筛选条件】
【ORDER BY 排序列表】
内连接:INNER,取两个集合的交集
SELECT *
FROM t_student
INNER JOIN t_teacher
on t_student.Teacher_id=t_teacher.TEANO
左连接:LEFT,取左边集合的全部和两集合相交的部分
SELECT *
FROM t_student
LEFT JOIN t_teacher
on t_student.STUNO=t_teacher.TEANO
右连接:RIGHT,取右边集合的全部和两集合相交的部分
SELECT *
FROM t_student
RIGHT JOIN t_teacher
ON t_student.STUNO=t_teacher.TEANO