Mysql的SQL语句汇总
文章目录
- SQL语句总结!!!
- 常见错误
- SQL语句优化
- 数据库 DATABASE
- 数据表 TABLE
- 列的增删改
- 索引的增删改
- 主键的增删改
- 外键的增删改
- 操作数据 CRUD
- 增加
- 删除
- 修改
- 查询
- 单表
- 多表
SQL语句总结!!!
常见错误
- group by
select A where B group by C having D
- 对数据先 where,再 group by,最后 having
- B 中的列和 C 中的列无关
A 中的列(除聚集函数外)均要出现在 C 中
D 中的列均要出现在 C 中 - C 中的所有列的 组合值 唯一(相当于多列主键),才能在一组
having
有 having 必须前面有 group byunion
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语句汇总相关推荐
- Mysql中SQL语句不使用索引的情况
Mysql中SQL语句不使用索引的情况 MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结 ...
- MySQL 查看SQL语句执行阶段和进度信息
MySQL 查看SQL语句执行阶段和进度信息 测试MySQL版本:5.7.31 根据<MySQL性能优化金字塔法则>做的实验,好书推荐! 我们在创建索引时,经常需要等待执行的SQL一段时间 ...
- MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】
MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...
- 【MySQL数据库】MySQL 高级SQL 语句一
@[TOC](MySQL 高级SQL 语句 一.MySQL 高级SQL 语句 1.1select -显示表格中一个或数个字段的所有数据记录 1.2distinct不显示重复的数据记录 1.3where ...
- windows下bat处理执行Mysql的sql语句
这篇文章主要介绍了windows下bat批处理执行Mysql的sql语句,需要的朋友可以参考下 有时候我们需要用bat来定时执行mysql那么就可以参考下面的代码 直接上代码: @ECHO OFF S ...
- shell实行mysql语句_【Mysql】shell运行mysql的sql语句_MySQL
bitsCN.com [Mysql]shell运行mysql的sql语句 shell本身是一种脚本语言,所以不能像java一样通过api去连接数据库.shell还是要借助mysql本身的一些运行脚本才 ...
- PHP获取MySQL执行sql语句的查询时间
PHP获取MySQL执行sql语句的查询时间 1. $t1=microtime(true); mysql_query($sql); echo microtime(true)-$t1; 2. //计时开 ...
- mysql下sql语句 update 字段=字段+字符串
mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgreSQL 用 || 来连贯字符串) MySQL连贯字符串不能利 ...
- mysql分析sql语句基础工具 —— explain
转载自 https://segmentfault.com/a/1190000009724144 立即登录 [笔记] mysql分析sql语句基础工具 -- explain mysql wateran ...
- mysql数据库语句分类_细数MySQL中SQL语句的分类
1:数据定义语言(DDL) 用于创建.修改.和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP DATABASE):2:创建.修改.重命名.删除表(C ...
最新文章
- HDU2141(二分查找)
- boost::partial_sort相关的测试程序
- 英语语法最终珍藏版笔记-18what 从句的小结
- java有var吗_java – Var和Var之间的区别
- 大年初一连夜带娃改bug:CTO把代码写成这鬼样子,被害惨了!
- mysql tree 和 hash_mysql_B-tree索引和哈希索引
- 【C++/Python 双语言实现】Luogu1196 银河英雄传说 + Python函数的定义与调用
- 南大网院计算机基础第一次作业,南大网院2015计算机基础第一次作业.docx
- js打开新窗口的方法总结
- MCS-51单片机总体概述(一)
- 《VP9 Video Codec》Overview
- 用计算机算术表白,数学表白密码
- CSMA(carrier sense multiple access)
- 树莓派升级安装python3.7
- 程序员的九阳神功,学会逆天改命!
- Django项目使用QQ实现第三方登录
- hexeditor作用_Hex编辑器Free Hex Editor Neo
- 音视频 FLV格式解析
- 游戏制作之路(25)Camera(摄像机)的清除标志Solid color
- 学习 瑞吉外卖项目——总结
热门文章
- PHP编写时的灵活性
- SkyDrive和Google Drive比较
- 使用 WebSphere ESB 构建企业服务总线
- Unity移动端使用 Handheld.PlayFullScreenMovie播放视频参数
- python和vba哪个难_VBA和Python到底哪个比较难学?
- Java基础,不需要复杂语句,使用for循环实现求出1~100之间的奇数和以及偶数和,超级简单
- cnn程序流程图_GitHub - suqcnn/vue: vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)...
- xss绕过尖括号和双括号_【Web安全入门】三个技巧教你玩转XSS漏洞
- 行政管理专业考计算机研究生分数,行政管理学,考研,历年分数线是多少?
- [转]跨域资源共享 CORS 详解