SQL语句整理笔记

MySQL常用SQL语句整理

基本语句

-- 显示所有数据库
SHOW DATABASE;
-- 创建数据库
CREATE DATABASE <数据库名>;
-- 使用数据库
USE <数据库名>;
-- 显示数据库中的所有表
SHOW TABLES;
-- 删除数据库
DROP DATABASE <数据库名>;
-- 创建一个数据表
~~CREATE TABLE TB_STUDENT(
	# PRIMARY KEY-主键  AUTO_INCREMENT-自增  COMMENT '备注、注释'
	ROW_ID BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
	#UNIQUE-表示唯一
	CLAZZ_ID BIGINT UNIQUE COMMENT '班级主键#关联班级表的主键',
	# NOT NULL-不为空
	STU_NAME VARCHAR(20) NOT NULL COMMENT '学生姓名',
	STU_AGE INT COMMENT '学生年龄',
	ACTIVE_FLAG INT COMMENT '数据是否有效 #1:是 0:否',
    #FOREIGN KEY(字段值)  REFERENCES 表名(字段值)-外键约束
	FOREIGN KEY (CLAZZ_ID) REFERENCES TB_CLAZZ(ROW_ID)
)COMMENT '学生表';~~ 
-- 查询表
SELECT * FROM <表名>;
-- 修改表
ALTER TABLE <表名> ADD COLUMN <字段值> <数据类型> COMMENT'添加一列';
ALTER TABLE <表名> ADD COLUMN <字段值> <数据类型> COMMENT'在某字段值之后添加'AFTER <字段值>;
ALTER TABLE <表名> ADD COLUMN <字段值> <数据类型> COMMENT'在第一列添加'FIRST <字段值>;
ALTER TABLE <表名> DROP COLUMN <字段值> COMMENT'删除字段值';
ALTER TABLE <表名> MODIFY COLUMN <字段值> <数据类型> COMMENT'修改字段值类型';
ALTER TABLE <表名> RENAME <表名> COMMENT'修改表名';
--重置表 (drop table+重新创建表)主键会重置
TRUNCATE TABLE <表名>;
-- 删除表
DROP TABLE <表名>;
-- 查询数据
SELECT * FROM <表名> WHERE <条件>;
SELECT <字段值>... FROM <表名> WHERE <条件>;
-- 去重
SELECT DISTINCT <表名> FROM <字段值>;
-- 判断null
SELECT * FROM <表名> WHERE <字段值> IS NULL;
SELECT * FROM <表名> WHERE <字段值> IS NOT NULL;
-- 排序
# ORDER BY
#自然排序  升序 ASC  默认不写就是ASC   
SELECT * FROM <表名> ORDER BY <字段值>;
#自然排序  降序  DESC  倒叙
SELECT * FROM <表名> ORDER BY <字段值> DESC;
#多条件排序
SELECT * FROM <表名> ORDER BY <字段值> ASC,<字段值> DESC;
--别名
SELECT <表名> AS <表名2> FROM <表名>;
# 效果 MY_NAME 下全是王小明  AS可省略
SELECT *,'王小明' AS MY_NAME FROM <表名>;
-- 插入数据
#VALUES中的顺序要和表的保持一致
INSERT INTO <表名>(字段值,字段值,字段值) VALUES (数据, 数据,数据) COMMENT'插入单条';
INSERT INTO <表名>(字段值,字段值,字段值) VALUES (数据, 数据,数据),(数据, 数据,数据),(数据, 数据,数据),(数据, 数据,数据)COMMENT'插入多条';
INSERT INTO TB_STUDENT2(CLAZZ_ID,STU_NAME,STU_AGE,STU_SEX,ACTIVE_FLAG)
SELECT CLAZZ_ID,STU_NAME,STU_AGE,STU_SEX,ACTIVE_FLAG FROM TB_STUDENT COMMENT'通过查询的方式插入数据';
-- 修改数据
UPDATE <表名> SET <字段值> = <> WHERE <条件>;
#  CONCAT()  字符串连接  设置目前时间
UPDATE TB_STUDENT2 SET STU_NAME = CONCAT(STU_NAME,'A'), CREATE_DATE = CURRENT_DATE() WHERE STU_SEX=0 COMMENT'字符串连接';
-- 删除数据
DELETE FROM <表名> WHERE <条件> COMMENT'物理删除';
UPDATE <表名> SET ACTIVE_FLAG = 0 WHERE ROW_ID = 1 COMMENT'逻辑删除';
#如果项目使用了逻辑删除,则每个查询语句后边都要加上
SELECT * FROM TB_CLAZZ WHERE ACTIVE_FLAG = 1;

聚合函数

在这里插入图片描述

#查看每个学生的总成绩  分组 GROUP BY  先通过GROUP BY进行数据分组,分组完成后,再根据分组的数据来统计  
SELECT STU_ID,SUM(SCORE) FROM MS_STUDENT_SUBJECT GROUP BY STU_ID;
SELECT SUM(SCORE) FROM MS_STUDENT_SUBJECT;

#统计出每个班级的学生数量
SELECT CLASS_ID,COUNT(ID) AS STU_COUNT FROM MS_STUDENT GROUP BY CLASS_ID;

#查看每个学生的平均成绩
SELECT STU_ID,AVG(SCORE) FROM MS_STUDENT_SUBJECT GROUP BY STU_ID;

#查看每个学生的平均成绩超过75分的
SELECT STU_ID,AVG(SCORE) AS AVG_SCORE FROM MS_STUDENT_SUBJECT 
GROUP BY STU_ID HAVING AVG_SCORE>75;
  • where 条件子句

    • AND OR
    • =  <   >  <= >= != <>
    • is null  is not null
  • order by 排序子句

    • ASC 升序
    • DESC 降序
  • group by 分组子句

    • having by + 条件 对分组后的数据进行约束

分页-LIMIT

#分页  limit 开始查询的数据的下标,查询的数量
SELECT * FROM MS_STUDENT LIMIT 0,3;
SELECT * FROM MS_STUDENT LIMIT 3,3;
#规律 (页号-1)*每页显示的条数  
SELECT * FROM MS_STUDENT LIMIT 6,3;

模糊查询

  • like % _
  • 模糊查询效率不高 一般不会使用
#模糊查询
#查询出所有姓张的  LIKE 模糊查询    % 匹配任意字符
SELECT * FROM MS_STUDENT WHERE STU_NAME LIKE '张%';
#查询出  ’张某某‘  一个_匹配一个任意字符
SELECT * FROM MS_STUDENT WHERE STU_NAME LIKE '张__';
  • in(值,值,…) 效率也不高 少使用
#查看年龄等于18,20,22,24    IN
SELECT * FROM MS_STUDENT WHERE STU_AGE IN(18,20,22,24);

多表查询-子查询

  • 子查询
    • 嵌套查询,一个查询语句的结果是另一个查询语句的条件的值。
    • 子查询的语句放在小括号内。
  • 子查询的结果
    • 结果只有一个值,则主查询使用 “=” 来判断
    • 结果有多个值,则主查询使用 “in” 来判断
UPDATE MS_CLASS SET STU_COUNT=(SELECT COUNT(ID) FROM MS_STUDENT WHERE CLASS_ID = 1)  WHERE ID=1;
#查询出学生数量大于10的班级的所有学生的信息  单个条件用=   多个数据用  IN  
SELECT * FROM MS_STUDENT WHERE CLASS_ID IN(SELECT ID FROM MS_CLASS WHERE STU_COUNT>=10);

多表查询-关联查询

  • 两个或两个以上的表连接成一个数据源

  • 注意:关联之后,并不是形成了一个新的数据表,而只是一种”内存状态“

  • INNER JOIN----查询量表共有的

  • LEFT JOIN----查询量左表的全都和俩表共有的

  • RIGTN JOIN----查询量右表的全都和俩表共有的

  • FULL JOIN----查询两表中所有的数据-----MySQL不支持

  • 可以使用多个join 别超过三个

#关联查询
SELECT MS_STUDENT.*,MS_CLASS.*
         #左关联  所有的数据以左边为主   一般从表数据多放左边
	FROM MS_STUDENT LEFT JOIN MS_CLASS
	ON MS_STUDENT.CLASS_ID = MS_CLASS.ID;
	
#关联查询   起别名
SELECT S.ID,S.CLASS_ID,C.CLASS_NAME,s.STU_NAME
	FROM MS_STUDENT S LEFT JOIN MS_CLASS C
	ON S.CLASS_ID = C.ID;

#INNER JOIN 查询两个表中都有的数据
SELECT S.*,C.*
FROM TB_STUDENT2 S
INNER JOIN TB_CLAZZ C
ON S.CLAZZ_ID = C.ROW_ID;

#LEFT   以左表为准
SELECT S.*,C.*
FROM TB_STUDENT2 S
LEFT JOIN TB_CLAZZ C
ON S.CLAZZ_ID = C.ROW_ID;

#RIGHT  以右表为准
SELECT S.*,C.*
FROM TB_STUDENT2 S
RIGHT JOIN TB_CLAZZ C
ON S.CLAZZ_ID = C.ROW_ID;
#FULL JOIN 两表中所有的数据  mysql 不支持
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值