目录
一、查询
1、基本查询语句 SELECT
- SELECT * FROM 表名1 别名1,表名2 别名2:查询表中的所有列(可以设置别名)
- SELECT 1:用来检测数据库连接
2、条件查询 WHERE
- SELECT * FROM 表名 WHERE 条件表达式:条件查询
- SELECT * FROM 表名 WHERE 条件表达式1 AND 条件表达式2
- SELECT * FROM 表名 WHERE 条件表达式1 OR 条件表达式2
- SELECT * FROM 表名 WHERE NOT 条件表达式:也可以用<>
- 【注】条件语句判断用一个= 不是两个等号
- 【注】如不加括号,按照NOT AND OR的优先级运算
- SELECT * FROM 表名 WHERE 字段名 LIKE '%字符串%':字段内容匹配,包含即可,%表示前/后还可以有内容
- SELECT * FROM 表名 WHERE 字段名 BETWEEN * AND *
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';
3、投影查询:返回指定字段(列),降维打击(手动狗头)
- SELECT 字段1 别名1,字段2 别名2,字段3 别名3,字段4 别名4,... FROM 表名:抽取出其中的一部分字段
- 【注】如果要使用中文字段名,用方括号括起来即可
- 【注】英文字段名也可以用方括号,也可以不用
4、排序 ORDER BY
- ORDER BY 字段名:放在WHERE条件语句之后使用
- ORDER BY 字段名 DESC:倒序排列
- ORDER BY 字段名1,字段名2:按照字段顺序依次作为条件进行排序
- 【注】对字符串用ASCII码,默认升序排列,即从小到大
5、分页查询:将查询结果截取成段显示 LIMIT OFFSET
- LIMIT M OFFSET N:从第N条开始,截取最多M条,放在ORDER BY排序之后(从0开始排)
- 【注】超过所包含的数量时会返回空集,不报错
- 【注】OFFSET可选
- 【注】在MySQL中也可以写作 LIMIT N,M
6、聚合查询:使用聚合函数,进行针对查询结果的数学计算
- SELECT COUNT(*) FROM ...:COUNT(*)返回查询到的记录数,是一个1行1列的二维表,列名为COUNT(*)
- SELECT COUNT(*) num FROM ...:将返回列名命名为num,默认0
- SUM(字段名):求和,默认NULL
- AVG(字段名):平均值,默认NULL
- MAX(字段名):最大值(字符类型会返回排序最后的字符),默认NULL
- MIN(字段名):最小值(类似上↑↑↑),默认NULL
- 【注】SELECT语句中,可以引用上述函数或由其构成的表达式作为返回值
- 因为聚合返回为二维表,也可以在返回值中依次写多个值(包括字段名、表达式、函数名)
SELECT CEILING(COUNT(*) / 3) FROM students;
7、分组聚合:GROUP BY
- SELECT *** FROM *** *** GROUP BY 字段名:分组
- SELECT 后的返回值中可以放入用以分组的字段名,以保证返回值能够正确表达
SELECT class_id,AVG(score) FROM students GROUP BY class_id;
SELECT class_id [班级],AVG(score) [平均分] FROM students GROUP BY class_id;
8、多表查询:SELECT * FROM 表1 表2【笛卡尔查询】
- SELECT * FROM 表1 表2:是对两个表的乘积,前提是这些表是通过外键关联的,这样才能够做乘积
- 又称笛卡尔查询,由于记录数为各表记录数乘积,所以要小心数据量过大
- 多表合并可能出现列名重复的情况,可以利用投影查询设置别名
- 要通过“表名、列名”的格式引用
- 可以在FROM后给表设置别名以简化引用:
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c;
9、连接查询
(1)内连接: SELECT *** FROM 表1 别名1 INNER JOIN 表2 别名2 ON 表1.某列名=表2.与之对应的列名(键)
- 可选添加WHERE子句或ORDER BY子句
- INNER JOIN:仅返回两张表中同时存在的行数据
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;
(2)外连接
- RIGHT OUTER JOIN:返回等号右边表中存在的全部行数据,对左表中不存在相应数据的自动记为NULL
- LEFT OUTER JOIN:返回左表存在的全部行数据,依次类推
- FULL OUTER JOIN:全部数据,依次类推
- UNION:内连接
- MySQL不支持全连接FULL OUTER JOIN
- 可以用集合交并补的关系看待这些概念
二、修改数据:CRUD Create Retrieve Update Delete 增查改删
1、增加 INSERT
- INSERT INTO 表明 (字段1, 字段2,...) VALUES (值1, 值2,...)
- 对自增主键不用给定;对具有默认值的字段,也可以不给定
- 顺序不重要,只要值与字段对应即可
- 可以一次添加多条记录,各自用()括起来,其间用,隔开,最后要用分号
- 数据库本身的记录集没有顺序概念,只有查询时才会排序,所以一般添加只是加到结尾ORDER BY ID
2、删除 DELETE
- DELETE FROM 表名 WHERE 筛选条件
- 匹配不到不会报错
- 不带WHERE会删库跑路!!!
3、更改 UPDATE
- UPDATE 表名 SET 字段1=值1,字段2=值2,...WHERE 筛选条件:可以对多条进行操作
UPDATE students SET name='大牛', score=66 WHERE id=1;
- UPDATE 表名 SET 表达式 WHERE 筛选条件:可以用表达式进行操作
- 如果没有匹配到,不会报错,不会更新
- UPDATE 表名 SET 表达式:可以没有WHERE条件,容易误操作谨慎!
- MySQL中进行更新时会自动进行匹配检测并返回结果
参考链接:
SQL教程-廖雪峰