啊哇哇数据库了
MySQL默认情况下在查询和操作数据库对象时,不区分大小写:
对于表名、列名和数据库名,MySQL不会区分大小写。例如,"mytable"、"MyTable"和"MYTABLE"都被视为相同的表名。
在SQL语句中,关键字和函数名不区分大小写。例如,"SELECT"、"select"和"Select"都是等效的。
在默认情况下,MySQL对于字符串比较是不区分大小写的。例如,"abc"和"ABC"被认为是相等的。
请注意,虽然MySQL不区分大小写,但在比较字符串时,它仍然遵循二进制字符集的规则。这意味着在某些字符集中,它可能会区分大小写(例如,对于拉丁字符集)。
DML(数据操作语言)
新增
指定列添加单行数据 VALUE
INSERT INTO staff(id,`code`,`name`,salary) VALUE
(2,'1002','李四',9000);
添加多行数据 VALUES
其中id为自动递增列,可以不指定:
NSERT INTO staff(code,name,salary) VALUES
('1003','王五',10000),
('1004','赵六',11000);
删除
删除表用 DROP
删除记录用 DELETE
-- 删除 delete
delete from staff where id=6
修改
修改/编辑 UPDATE
-- 修改/编辑 UPDATE
UPDATE staff set name='李清照' where id=5
UPDATE staff SET salary=salary+2000 WHERE name='赵六'
UPDATE staff SET name='苏轼',salary=salary-2000 WHERE id=4
清空表
delete from staff; -- 删除掉每一行数据
TRUNCATE staff; -- 清空表,数据量比较大的时候truncate快,性能更快一些
DQL(数据查询语言)
简单查询
查询 SELETE
不止可以查询表中数据,也可以查询获取一个常量,或调用返回一个方法的值,如当前时间:
查询表格:指定列名查询,也可以使用星号 * 指代所有的列
-- 指定列名查询
SELECT name,salary from staff
-- 可以使用*代替所有的列
SELECT * from staff
可以使用 AS 对列、方法结果、表、视图等指定别名
-- 使用as 指定别名,对列,方法结果,表,视图
SELECT name as `姓名` from staff
使用 WHERE 指定条件语句, != 和 <> 都是不等于
-- where 指定条件语句
SELECT * from staff where id=4
-- 不等于
SELECT * from staff WHERE id != 1
SELECT * from staff WHERE id <> 1
-- 大于小于
SELECT * from staff WHERE id > 3;
select * from staff WHERE id >=3;
select * from staff WHERE id < 4;
SELECT * from staff WHERE id <= 4;
对null值的判断:不可以直接用某个数据=null表示
-- 对null值的判断
#SELECT * from staff WHERE salary=null; --不可以
SELECT * from staff WHERE salary is null;
SELECT * FROM staff WHERE salary <=> null; -- 等于null
SELECT * FROM staff WHERE salary is NOT null;
多条件判断 使用 AND 和 OR
-- 多条件
SELECT * FROM staff WHERE id<5 AND salary>10000;
SELECT * FROM staff WHERE salary>10000 OR salary<9000;
某个值在不在...当中 IN...
-- in not in 在不在...当中
#SELECT * FROM staff WHERE id=1 OR id=3...
SELECT * FROM staff WHERE id in(1,3,5,7,8,10,12);
SELECT * FROM staff WHERE id not in(1,3,5,7,8,10,12);
范围判断在...之间(包括边界值)BETWEEN ... AND...
-- BETWEEN AND 范围判断在..之间,包括边界
SELECT * FROM staff WHERE salary BETWEEN 8000 AND 10000;
模糊查询
模糊查询用 LIKE
%指代任意个数的字符, 下划线 _ 代表有且只有一个字符
-- 模糊查询 LIKE %任意个数字符 _代表有且只有一个字符
SELECT * from staff where name LIKE '%李%';
-- 姓张的员工
SELECT * from staff where name LIKE '张%';
-- 张某
SELECT * from staff where name LIKE '张_';
是否存在 EXISTS
EXISTS 类似于一把锁,后面能查出结果,前面的语句才会给结果
SELECT * FROM staff WHERE
EXISTS(SELECT * FROM staff WHERE id=1)
ANY 指任意一个数值
ALL 指全部数值
-- any all
SELECT * from staff
WHERE salary> ANY(SELECT code from staff) -- 大于任意一个数值,不同类型另有比较规则
SELECT * from staff
WHERE salary> ALL(SELECT code from staff) -- 大于全部数值
当比较的前后类型不一致时可能另有比较规则而导致实际结果和理想结果有偏差
排序 ORDER BY
正序 ASC,倒序 DESC
注意,需要排序的每一列都需要单独指定排序方式,没指定则默认正序ASC
-- 排序 ORDER BY
SELECT * FROM staff ORDER BY salary
-- 正序 asc 倒序 DESC
SELECT * FROM staff ORDER BY salary ASC;
SELECT * FROM staff ORDER BY salary DESC;
SELECT * FROM staff ORDER BY salary ASC,code DESC;
-- 每一个列都需要指定排序顺序,没指定就默认asc
SELECT * FROM staff ORDER BY salary,code DESC;
拼接(合并)查询结果
UNION 会将重复的结果去除
UNION ALL 将完整结果全部合并,不会去重
-- 拼接(合并)查询结果
select name,salary FROM staff UNION
SELECT code,name FROM staff
-- UNION 会将重复的结果去除
select name,salary FROM staff UNION
SELECT name,salary FROM staff
-- UNION ALL 没有去重,全部合并
select name,salary FROM staff UNION ALL
SELECT name,salary FROM staff
去掉重复数据 DISTINCT
-- 去重 对整个查询结果去重
SELECT DISTINCT salary,name FROM staff;
部分查询 LIMIT
-- 部分查询 LIMIT 3 查询前三名
SELECT * from staff ORDER BY salary DESC LIMIT 3;
-- 查询第三到五名 limit start,count
SELECT * FROM staff ORDER BY salary DESC LIMIT 2,3;
limit的取值类似于数组,跟一个参数3表示保留查询结果的前三个;
两个参数 2,3 表示,从下标为2的(第三个)数据开始,取三个数据。
在SQL语句中,CASE WHEN THEN是一种条件表达式,用于根据不同的条件返回不同的结果。
可以使用AS为返回的结果起一个别名
-- case when THEN
SELECT * ,case
when salary<10000 then '薪资较低'
WHEN salary>=10000 and salary<=20000 then '薪资正常'
ELSE '薪资较高'
end as `LEVEL` from staff;
SELECT *,case salary when 12000 then '还行'
WHEN 15000 THEN '还可以'
WHEN 18000 then '挺高'
when 20000 then '哇哦'
when 26000 then '好厉害'
END as `level`
from staff;
聚合函数
最大值MAX、最小值MIN、平均数AVG、求和SUM、个数COUNT
-- 分组 聚合函数
-- 最大值
SELECT MAX(salary) from staff;
-- 最小值
SELECT MIN(salary) FROM staff;
-- 平均数
SELECT AVG(salary) FROM staff;
-- 求和
SELECT SUM(salary) from staff;
-- 个数
SELECT COUNT(salary) FROM staff;
分组查询 GROUP BY
分组查询的 select 后面只能是分组的列以及聚合函数
-- 分组查询
-- SELECT 后面只能是分组的列以及聚合函数
SELECT department,AVG(salary) as 平均薪资,
SUM(salary) as 薪资总和
FROM staff GROUP BY department;
分组筛选 HAVING
对分好的组在筛选出符合条件的组
-- 分组筛选
-- HAVING 对分组之后数据再筛选
SELECT department FROM staff GROUP BY department
HAVING AVG(salary)<12000;
使用列名传入聚合函数,当计算的数据中包含null值时,会直接把null值忽略,不计算在内。
传入星号* 和常量,则计算包括null值的整列所有数据
-- null值忽略
-- 列名忽略null
SELECT department,AVG(salary),COUNT(salary),COUNT(*) FROM staff GROUP BY department;
-- 用*和常量计算整列所有数据,包括null值
SELECT COUNT(*),count(1) FROM staff;