Sql基础语法:
1.select语句:
1.从列表取出指定内容;
SELECT
a,
b
FROM
list
2.算数表达式;
SELECT
a,
b * 12
FROM
list
3.计算去掉null值:
SELECT
a * 12 (CASE WTHEN a IS NULL THEN 0 ELSE a END) AS name
FROM
list
4.给单独字段/组合去重:DISTINCT
SELECT DISTINCT
a,
b
FROM
list
2.WHERE:对单条数据进行过滤;
1.定值查询:
SELECT * FROM list WHERE a 10
2.范围查询:
SELECT * FROM list WHERE a >= 100 AND a <= 200
3.二选一任意条件查询:
SELECT * FROM list WHERE a = 100 OR a = 200 或者 SELECT * FROM list WHERE a IN (100, 200)
4.模糊查询:LIKE
SELECT * FROM list WHERE aname LIKE '%b%' // 查询名称中带有b的内容;
SELECT * FROM list WHERE aname LIKE '_b%' // 查询名称中第二个字母带有b的内容;
SELECT * FROM list WHERE aname LIKE '%\%%' // 查询名称中带有%的内容;
3.ORDER BY:排序;
1.
SELECT * FROM list ORDER BY b; // list 内容按照 b 排序(默认升序ASC,最小/新的在最上面);
2.
SELECT * FROM list ORDER BY b DESC; // list 内容按照 b 倒序排序;
3.
SELECT
*
FROM
list
WHERE
a <> 0 // a != 0
ORDER BY
b // 过滤出a != 0列表内容,再按b进行排序;
4.组合排序;
SELECT
*
FROM
list
ORDER BY // 先将a进行默认排序,再在a排序完之后的基础内把b进行倒序排序;
a,
b DESC
4.常用函数:
1.字符串拼接;
SELECT concat('www','baidu','com') // www.baidu.com
5.组函数:
1.max:去最大的值;
SELECT max(a) // 取出表中最大的值;
2.利用max组合筛选;
SELECT
name
FROM
list
WHERE
a = ( // 子查询:筛选a条件
SELECT max(a) FROM list // 取表中最大的值;
)
5.count: 取列表记录长度;
SELECT count(*) FROM list // 返回整个list长度
SELECT count(a) FROM list // 返回整个list中包含a的长度,注意,如果a中有空值情况不会计入长度;
6.GROUP BY: 分组:
1.
SELECT a FROM list GROUP BY b // 列表中a数据按照b进行分组;
7.表链接:
1. 思路:先按分组把最大内容取出来,然后再通过两张表对比,从总表中拿出对应数据;
SELECT
name, sal,
list.deptno // 因为此时deptno有多个表中都有,需要制定deptno从哪个表取出来的;
FROM
list // 表1
JOIN // 表1连接表2
( SELECT deptno, max(sal) as max_sal FROM list GROUP BY deptno ) as t // 表2,按deptno分组找出最大sal的内容
WHERE
list.deptno = t.deptno and list.sal = t.max_sal // 表1和表2连接的过滤条件
8.having子句:对GROUP BY分组进行过滤;
9.子查询深入:
SELECT name, sal FROM list
JOIN
(SELECT avg(sal) as avg_sal FROM list) t
WHERE
list.sal > t.avg_sal
10.自连接:将一张表自行通过条件进行连接;?
SELECT
a.name, b.name
FROM
alist a
JOIN
blist b
ON
a.mainTitle = b.subTitle; // 通过这个维度将两条数据结合起来;
11.表链接:将两张独立的表通过一个维度(拥有同数据的点)合成一个新的表;
两个标准
92标准:
SELECT
aname, bname
FROM
alist, blist
WHERE
alist.sex = blist.sex;
优点:
1.简洁;
缺点:
1.列表较多时比较乱;
2.容易和WHERE混淆,不容易理解表链接;
99标准:
// 两张表
SELECT
aname, bname
FROM
alist
JOIN
blist
ON
alist.sex = blist.sex;
// 多张表
SELECT
a.name, b.name, c.age
FROM
alist a
JOIN
blist b
ON a.sex = b.sex;
JOIN
clist c
ON a.class = c.class
12.分页:
SELECT a FROM list limit 5; // 取表中前5条数据
SELECT a FROM list list 5, 6 // 在表中从索引5开始往后再取6条(取第5~11条数据);注意,索引从0开始;
SELECT a FROM list ORDER BY b DESC list 5 // 取表中按b倒序排序之后的前5条数据(取列表中b排序的TOP5);
总结:
SELECT X FROM XX // 表名
SELECT X FROM XX WHERE XX // 对数据进行过滤 WHERE
SELECT X FROM XX GROUP BY XX // 分组 GROUP BY
SELECT X FROM XX GROUP BY XX HAVING x // 对分组进行过滤 HAVING
SELECT X FROM XX ORDER BY X // 排序 ORDER BY
处理优先顺序: 取数据 -》 过滤 -》 分组 -》 分组过滤 -》 排序;