Mysql学习笔记二

1、表内容操作—条件选择

SELECT * FROM 表 WHERE id BETWEEN 5 AND 16; # 也支持多个并列

SELECT * FROM 表 WHERE id IN(11,22,33)

SELECT * FROM 表 WHERE id NOT IN(11,22,33)

SELECT * FROM 表 WHERE id IN(select nid from 表)

2、表内容操作—通配符模糊匹配

SELECT * FROM 表 WHERE name LIKE 'ale%'  # - ale开头的所有(多个字符串) where ... like ''

SELECT * FROM 表 WHERE name LIKE 'ale_'  # - ale开头的所有(1个字符)

SELECT * FROM 表 WHERE name LIKE '_le%'

3、表内容操作—限制/分页

SELECT * FROM 表 LIMIT 5;            # 前5行

SELECT * FROM 表 LIMIT 4,5;          # 从第4行下一行开始的5行

SELECT * FROM 表 LIMIT 5 OFFSET 4    # 从第4行开始的5行,与上一条功能一样

4、表内容操作—排序

SELECT * FROM 表 ORDER BY 列 ASC            # 根据 “列” 从小到大排列

SELECT * FROM 表 ORDER BY 列 DESC            # 根据 “列” 从大到小排列

SELECT * FROM 表 ORDER BY 列1 DESC,列2 ASC  # 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序,否则一列相同时其他列默认升序排序

5、表内容操作—分组+聚合

# group by获取各组第一行作为标识,其余行丢弃

SELECT num FROM 表 GROUP BY num

# 分组的原理默认是升序排序,也可以降序

SELECT num FROM 表 GROUP BY num DESC

SELECT count(1) FROM 表 GROUP BY num # 也可使用

SELECT count(name) FROM students GROUP BY classid

# count(1) 和 count(name)区别

# 如果name中有null则count(name)不记录,其余时候二者完全一样

SELECT count(distinct name) FROM students GROUP BY classid # 去重

6、表内容操作—组合

# 纵向组合,并以第一个表字段为准

# 组合,自动处理重合

SELECT nickname FROM A UNION SELECT name FROM B;

# 组合,不处理重合

SELECT nickname FROM A UNION ALL SELECT name FROM B;

7、表内容操作—连表

# 根据对应关系连表,实际等同于inner join

SELECT * FROM students,disc_info WHERE students.discipline = disc_info.nid;

SELECT students.name,disc_info.discipline FROM students,disc_info WHERE students.discipline = disc_info.nid;

# join 左右连接如果无对应关系显示NULL,join效率高

# 取交集,inner join,也可以理解成过滤掉含NULL数据行的左右连接

SELECT A.num, A.name, B.name FROM

A INNER JOIN B

ON A.nid = B.nid;

# 右连接,right join

SELECT A.num, A.name, B.name FROM

A RIGHT JOIN B

ON A.nid = B.nid

# 左连接,right join

SELECT A.num, A.name, B.name FROM

A LEFT JOIN B

ON A.nid = B.nid

8、表内容操作—CASE WHEN 判断

CASE WHEN 表达式

    THEN 输出

WHEN 表达式 # 多少个WHEN都可以

    THEN 输出

ELSE

    输出

END

9、表内容操作—半连接

SELECT

    id,NAME,classid

FROM

    student tf

WHERE

    id = (

        SELECT

            max(id)

        FROM

            student ts

        WHERE

            ts.classid = tf.classid

    );

10、表内容操作—索引

# 创建索引

CREATE INDEX name_index ON student(name);

11、表内容操作—视图

CREATE VIEW V1 AS  # 反复利用某个临时表则可以创建视图

SELECT * FROM stu WHERE id > 10;

# 视图是一个动态表,会从物理表动态读出来。但无法直接对虚拟表即视图修改

# 修改视图

ALTER VIEW V1 AS SELECT * FROM stu WHERE id > 20;

# 删除视图

DROP VIEW V1;

12、表内容操作—触发器

DELIMITER // # 修改终止符

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT INTO tb1 FOR EACH ROW

BEGIN

    INSERT INTO tb2(name) VALUES('chenx');

    INSERT INTO tb2(name) VALUES(NEW.sname);  # 指代新插入的一行,OLD可以用在DELETE和UPDATE

END //

DELIMITER ; # 修改回原终止符

# BEFORE可以换成AFTER,INSERT可以换成DELETE或者UPDATE

# 删除触发器

DROP TRIGGER tri_before_insert_tb1;

13、表内容操作—函数

# 内置函数

SELECT CURDATE(); # 执行函数的用法

SELECT DATE_FORMAT(ctime, "%Y-%m") FROM stu GROUP BY DATE_FORMAT(ctime, "%Y-%m") # 时间格式化

你可能感兴趣的:(Mysql学习笔记二)