Sql基础语法:

269 阅读3分钟

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条(取第511条数据);注意,索引从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
处理优先顺序: 取数据 -》 过滤 -》 分组 -》 分组过滤 -》 排序;