SQL常用增删改查语句
#仅记录自己常用 备作参考
目录
DQL(数据查询语言)
查看数据库信息:
- 注释:-- 文本, /* 文本 */
- SHOW DATABASES
- USE DATABASE
- SHOW TABLES FROM database
- DESC table
1.select
语法:select 字段 from 表名
- 查询的结果是一个虚拟表;
一、查询常量
SELECT 100;
二、查询表达式
SELECT 100 % 3;
三、查询字段
SELECT name FROM students;
SELECT ID,name,sex FROM students;
SELECT * FROM students; --查询所有字段
四、查询(调用)函数+起别名
SELECT database();
SELECT version();
SELECT user();
SELECT ID,salary,IF(salary>3000,'A','B') AS rank
FROM emplpyees;
SELECT ID,salary,
CASE WHEN salary <= 3000 THEN 'D'
CASE WHEN salary <= 5000 THEN 'C'
CASE WHEN salary <= 8000 THEN 'B'
ELSE 'A'
END AS rank
FROM employees;
五、去重
SELECT DISTINCT a
FROM b;
2.join
内连接(显示两张表的交集)
- 语法:
- (SQL92标准)
select 查询对象 from 表1 别名,表2 别名
where 连接条件; - (SQL99标准)
select 查询对象 from 表1 别名
join 表2 别名
on 连接条件;
- 等值连接 (优化:大表放join左边,小表放join右边)
- 非等值连接
- 自连接
外连接(显示主表所有信息,从表能匹配上显示,匹配不上显示null)
- 语法:
- (左外连接,join左边为主表)
select 查询对象 from 表1 别名
left join 表2 别名
on 连接条件; - (右外连接,join右边为主表)
select 查询对象 from 表1 别名
right join 表2 别名
on 连接条件;
- 外连接连接条件为 ‘=’
3.where
-
按关系表达式筛选
< > = >= <= <>(也可用‘!=’但不建议) -
按逻辑表达式筛选
and or not -
模糊查询
LIKE/NOT LIKE IN/NOT IN BETWEEN…AND/NOT BETWEEN…AND IS NULL/IS NOT NULLlike一般搭配通配符使用:
‘_’:任意单个字符 ‘%’:任意多个字符
转义字符:
LIKE '$_%’ ESCAPE ‘$’;(查询以_开头的字符串)
4.group by
按字段分好组之后如果不按分组函数查询则显示的是该组第一行数据!
5.having
6.order by
7.limit
8.执行顺序
常用函数
1.字符型
1. concat(‘str’,‘str’,‘str’,…) 拼接字符串
和‘+’的区别:
- ‘+’:
- 数值+数值
- 其中一个为字符型—>强制转换为数值型,若无法转换则换成‘0’
- 其中一个为null,结果为null(将null看做正无穷)
- concat:
- 字符型拼接
- 将数值转换为字符型进行拼接
2. substr(‘str’,local,length) 截取字符串
- local为起始位置,length为截取长度
2.逻辑型
1. IFNULL(表达式1,表达式2)
- 表达式1不为null,显示表达式1,否则显示表达式二
2. EXIST(子查询语句)
- 返回布尔值,若子查询语句不为空返回真,为空返回假。
- NOT EXIST相反
- 由于IN效率较低,故可由EXIST或者表连接代替,NOT IN同理
--查询某课程成绩大于60分的学生姓名
SELECT s.sname
FROM student s
WHERE s.sno IN (SELECT sno FROM scores WHERE degree > 60);
---------------------------------------------------------
SELECT s.sname
FROM students s
WHERE EXIST (SELECT degree FROM scores
WHERE degree > 60
AND sno = s.sno);
----------------------------------------------------------
SELECT s.sname
FROM students s
JOIN scores sc
ON s.sno = sc.sno
WHERE sc.degree > 60;
窗口函数
插入连续序号列(无视重复)
row_number() over(partition by 字段 order by 字段)
create index
create 索引类型 index 索引名 on 表名(字段)
/创建索引,提高搜索速度/
-
一般在 1.数据量大 2.经常被查询的字段 建立索引
-
普通索引和唯一性索引性能差不多,但唯一性索引要求建立字段中数据唯一
-
对于复合索引on(a,b,c)只对a|a,b|a,b,c这3种查询有效果,其他顺序无效。
-
优点:提高查询速度
-
缺点:1.占用一定储存空间 2.增加或修改表中数据时会动态修改索引,降低表中数据更新维护速度
详见 https://www.cnblogs.com/hyd1213126/p/5828937.html