文章目录

  • SQL语句总结!!!
    • 常见错误
    • SQL语句优化
  • 数据库 DATABASE
  • 数据表 TABLE
    • 列的增删改
    • 索引的增删改
    • 主键的增删改
    • 外键的增删改
  • 操作数据 CRUD
    • 增加
    • 删除
    • 修改
    • 查询
      • 单表
      • 多表

SQL语句总结!!!

常见错误

  • group by
    select A where B group by C having D
  1. 对数据先 where,再 group by,最后 having
  2. B 中的列和 C 中的列无关
    A 中的列(除聚集函数外)均要出现在 C 中
    D 中的列均要出现在 C 中
  3. C 中的所有列的 组合值 唯一(相当于多列主键),才能在一组
  • having
    有 having 必须前面有 group by

  • union
    select A unoin select B
    A 和 B 的列、聚集函数均要相同,但顺序可不一致

  • join…on 联结表
    select 后建议加上on 的字段,select A...join...on t1.A = t2.A;

  • delete、update
    mysql 中,delete、update 操作若出现 select子句过滤,不能为同一张表
    解决:将子语句作为 from 表再包裹一层,select * from(子句) as t,给表起别名

SQL语句优化

  • distinct
    用 group by 代替 distinct,更高效
  • 多表查询
    尽量用联结查询(join on)

数据库 DATABASE

# 查看所有数据库
SHOW DATABASES;# 查看一个数据库的所有表
USE school;
SHOW TABLES;# 查看一个表的所有列的属性信息
DESCRIBE student;
SHOW COLUMNS FROM student;      # 等效# 创建
CREATE DATABASE IF NOT EXISTS school;
CREATE DATABASE IF NOT EXISTS school DEFAULT CHARACTER  SET utf8;   # 字符集为 utf8
CREATE DATABASE IF NOT EXISTS school DEFAULT CHARACTER  SET utf8 DEFAULT COLLATE utf8_chinese_ci;   # 校对规则为 utf8_chinese_ci(简体中文,不区分大小写)# 删除
DROP DATABASE IF EXISTS school;# 修改:数据库的参数
ALTER DATABASE IF EXISTS school DEFAULT CHARACTER  SET utf8;# 修改:数据库的名字
RENAME DATABASE school TO new_school;

数据表 TABLE

# 查看一个表的所有列的属性信息
DESCRIBE student;
SHOW COLUMNS FROM student;      # 等效# 创建
CREATE TABLE IF NOT EXISTS student(id int NOT NULL AUTO_INCREMENT,score float   NOT NULL DEFAULT 0,name varchar(20) NOT NULL,email char(100) NOT NULL DEFAULT '123@qq.com',birth date NOT NULL   DEFAULT '2000-01-01',others text  NULL,PRIMARY KEY(id),       # 主键ADD CONSTRAINT fk_course_student FOREIGN KEY score REFERENCES course(score)     # 外键
)ENGINE=InnoDB;        # 指定引擎InnoDBCREATE TABLE IF NOT EXISTS course(id int    NOT NULL AUTO_INCREMENT,score float NOT NULL DEFAULT 0,course_name  varchar(20) NOT NULL,PRIMARY KEY(id)
);# 删除
DROP TABLE IF EXISTS student;# 修改表的名字
RENAME student TO new_student;

列的增删改

# 增
ALTER TABLE student
ADD age int NULL DEFAULT 18;# 删
ALTER TABLE student
DROP COLUMN age;# 改

索引的增删改

# 增
ALTER TABLE student
ADD INDEX index_name(name);

主键的增删改

外键的增删改

# 增
ALTER TABLE student
ADD CONSTRAINT fk_course_student            # 外键名fk_course_student
FOREIGN KEY score REFERENCES course(score);

操作数据 CRUD

增加

insert into … values …

# 一条数据
INSERT INTO student
VALUES(97,      '李华',...);            # 按列的顺序插入# 批量:多条数据
INSERT INTO student
VALUES(97,'李华',...),(72,'王明',...);      # 按列的顺序插入# 插入部分
INSERT INTO student(birth,name)                     # 列不按顺序
VALUES('1998-01-01','李华');# 将其他表的数据插入
INSERT INTO student(score)
SELECT score
FROM course
WHERE course_name='数学';

删除

delete table
truncate table

# 删除一个表的所有数据
DELETE FROM student;# 删除行
DELETE FROM student
WHERE id<10;# 删除列
UPDATE student
SET others=NULL;#DELETE TABLE student
#TRUNCATE TABLE student;

修改

update… set…
ignore

# 更新行
UPDATE student
SET others=NULLscore=100.0;
WHERE id<10;# 更新列
UPDATE student
SET others=NULLscore=100.0;# 强制更新(无论错误)
UPDATE IGNORE student
SET others=NULLscore=100.0;

查询

单表

select distinct … from …
where
group by … with rollup having …
order by… desc
limit

SELECT *
FROM student;       SELECT DISTINCT name, birth, email      # 两行数据的3列完全一致,才去重。若3列不完全一致,则都显示。
FROM student;SELECT *
FROM student
ORDER BY name, score DESC       # 先按 name 升序, 若相同则按 score 降序
LIMIT 10;SELECT *
FROM student
ORDER BY name, score DESC
LIMIT 2,1;      # 数据行:0、1、2...   从行2(第三行)开始取1个SELECT *
FROM student
ORDER BY name, score DESC
LIMIT 1 OFFSET 2;       # 效果同上SELECT birth
FROM student
GROUP BY birth  with ROLLUP;        # 包括 NULL 分组SELECT birth, AVG(score) as score_avg       # 除聚集函数中的列,select的所有列必须出现在group by中。
FROM student
WHERE age=18
GROUP BY birth HAVING id>10;SELECT *
FROM student
WHERE others IS NOT NULL;SELECT *
FROM student
WHERE score NOT BETWEEN 60 AND 100;         # [60,100]闭区间SELECT *
FROM student
WHERE birth NOT IN ['2020-01-01', '2020-02-01'];SELECT *
FROM student
WHERE (id=10 OR id=20) AND other IS NULL;     # 用括号改变优先级,实际中,同时使用AND和OR建议用括号,默认先处理 and,再处理 orSELECT *
FROM student
WHERE name LIKE '李%';         # 匹配整个列值,即以李开头SELECT CONCAT('(', name, '_', score, ')')
AS name_score
FROM student
WHERE id>10;SELECT id + score - id
AS new_score
FROM student
WHERE id>10;# 聚集函数
SELECT Count(*)
FROM student;       # 返回表的行数(包括 NULL)SELECT Count(name)
FROM student;       # 返回列的行数(排除 NULL)SELECT Avg(DISTINCT score)
FROM student;           # 结合 DISTINCT

多表

join on
union
union all

# 子查询
SELECT *
FROM student
WHERE birth IN (SELECT birthFROM student WHERE id>2);SELECT score,(SELECT course_name FROM courseWHERE course.score>60)
FROM student
WHERE id>10;# 联合查询
SELECT name, student.score, course.score
FROM student, course;           # 笛卡尔积
# JOIN ON 一共有 7种# 组合查询
SELECT name, email
FORM student
WHERE id>10
UNION           # 两个select的列相同,顺序可不同
SELECT email, name
FORM student
WHERE id>10
ORDER BY id;    # 只能使用一个 order by,且在最后一条select后SELECT name, email
FORM student
WHERE id>10
UNION ALL           # 组合结果不去重
SELECT email, name
FORM student
WHERE id>10;

Mysql的SQL语句汇总相关推荐

  1. Mysql中SQL语句不使用索引的情况

    Mysql中SQL语句不使用索引的情况 MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结 ...

  2. MySQL 查看SQL语句执行阶段和进度信息

    MySQL 查看SQL语句执行阶段和进度信息 测试MySQL版本:5.7.31 根据<MySQL性能优化金字塔法则>做的实验,好书推荐! 我们在创建索引时,经常需要等待执行的SQL一段时间 ...

  3. MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】

    MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...

  4. 【MySQL数据库】MySQL 高级SQL 语句一

    @[TOC](MySQL 高级SQL 语句 一.MySQL 高级SQL 语句 1.1select -显示表格中一个或数个字段的所有数据记录 1.2distinct不显示重复的数据记录 1.3where ...

  5. windows下bat处理执行Mysql的sql语句

    这篇文章主要介绍了windows下bat批处理执行Mysql的sql语句,需要的朋友可以参考下 有时候我们需要用bat来定时执行mysql那么就可以参考下面的代码 直接上代码: @ECHO OFF S ...

  6. shell实行mysql语句_【Mysql】shell运行mysql的sql语句_MySQL

    bitsCN.com [Mysql]shell运行mysql的sql语句 shell本身是一种脚本语言,所以不能像java一样通过api去连接数据库.shell还是要借助mysql本身的一些运行脚本才 ...

  7. PHP获取MySQL执行sql语句的查询时间

    PHP获取MySQL执行sql语句的查询时间 1. $t1=microtime(true); mysql_query($sql); echo microtime(true)-$t1; 2. //计时开 ...

  8. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgreSQL 用 || 来连贯字符串) MySQL连贯字符串不能利 ...

  9. mysql分析sql语句基础工具 —— explain

    转载自 https://segmentfault.com/a/1190000009724144 立即登录 [笔记] mysql分析sql语句基础工具 -- explain  mysql wateran ...

  10. mysql数据库语句分类_细数MySQL中SQL语句的分类

    1:数据定义语言(DDL) 用于创建.修改.和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP  DATABASE):2:创建.修改.重命名.删除表(C ...

最新文章

  1. HDU2141(二分查找)
  2. boost::partial_sort相关的测试程序
  3. 英语语法最终珍藏版笔记-18what 从句的小结
  4. java有var吗_java – Var和Var之间的区别
  5. 大年初一连夜带娃改bug:CTO把代码写成这鬼样子,被害惨了!
  6. mysql tree 和 hash_mysql_B-tree索引和哈希索引
  7. 【C++/Python 双语言实现】Luogu1196 银河英雄传说 + Python函数的定义与调用
  8. 南大网院计算机基础第一次作业,南大网院2015计算机基础第一次作业.docx
  9. js打开新窗口的方法总结
  10. MCS-51单片机总体概述(一)
  11. 《VP9 Video Codec》Overview
  12. 用计算机算术表白,数学表白密码
  13. CSMA(carrier sense multiple access)
  14. 树莓派升级安装python3.7
  15. 程序员的九阳神功,学会逆天改命!
  16. Django项目使用QQ实现第三方登录
  17. hexeditor作用_Hex编辑器Free Hex Editor Neo
  18. 音视频 FLV格式解析
  19. 游戏制作之路(25)Camera(摄像机)的清除标志Solid color
  20. 学习 瑞吉外卖项目——总结

热门文章

  1. PHP编写时的灵活性
  2. SkyDrive和Google Drive比较
  3. 使用 WebSphere ESB 构建企业服务总线
  4. Unity移动端使用 Handheld.PlayFullScreenMovie播放视频参数
  5. python和vba哪个难_VBA和Python到底哪个比较难学?
  6. Java基础,不需要复杂语句,使用for循环实现求出1~100之间的奇数和以及偶数和,超级简单
  7. cnn程序流程图_GitHub - suqcnn/vue: vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)...
  8. xss绕过尖括号和双括号_【Web安全入门】三个技巧教你玩转XSS漏洞
  9. 行政管理专业考计算机研究生分数,行政管理学,考研,历年分数线是多少?
  10. [转]跨域资源共享 CORS 详解