MySQL增删改查

DELETE清空数据表的时候不会重置 AUTO_INCREMENT 的值,可以通过ALTER语句将其重置为1

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值类型,请不要使用引号。

查询记录

SELECT 语句用于从数据库中选取数据
语法结构
SELECT select_exp,... FROM table_name 
WHERE 条件
GROUP BY {col_name|position} HAVING 二次筛选
ORDER BY {col_name|position|expr} ASC|DESC
LIMIT 限制结果集的显示条数

SELECT * FROM table_name //查询表中所有记录 *代表所有字段

SELECT 字段名称,... FROM table_name //查询指定字段名称的信息

SELECT 字段名称,... FROM db_name.table_name //查询某个数据库下某个表的[某个字段]的详细信息

SELECT 字段名称 AS 别名 FROM db_name //给字段起一个别名

SELECT 字段名称|* FROM table_name AS 别名 //给数据表起别名

SELECT table_name.col_name,... FROM table_name //查询某个表下面某个字段名称的信息

在表中,一个列可能会包含多个重复值,比如几个人都属于北京,有时您也许希望仅仅列出不同(distinct)的值
SELECT DISTINCT 字段名称 FROM table_name ; //DISTINCT 关键词用于返回唯一不同的值

添加记录

INSERT INTO 语句用于向表中插入新记录
语法结构
INSERT INTO table_name(字段名称) VALUE|VALUES(值) 

不指定字段名称,需要按照建表时的字段顺序延每一个字段赋值
INSERT INTO table_name VALUE|VALUES() 

列出指定字段
INSERT INTO table_name(字段名称) VALUES(值) 

一次添加多条记录
INSERT INTO table_name(字段名称,...) VALUES(值,...) 

INSERT ... SET 的形式
INSERT INTO table_name SET 字段名称=值,... //如果值是字符串类型,需要加引号

INSERT ... SELECT 的形式
INSERT INTO table_name SELECT 字段名称,...FROM table_name WHERE 条件

更新记录

UPDATE 语句用于更新表中的记录
语法结构
UPDATE table_name SET 字段名称=值,字段名称=值,... WHERE条件
如果不添加条件,整个表中的相应的字段名称的记录都会被更新,执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

删除记录

DELETE 语句用于删除表中的记录
语法结构
DELETE FROM table_name WHERE条件
如果不添加条件表中所有记录都会被删除

DELETE清空数据表的时候不会重置 AUTO_INCREMENT 的值,可以通过ALTER语句将其重置为1

SQL关于删除的三个语句:DROP、TRUNCATE、DELET的区别
DROP test; //删除表test,并释放空间,将test删除的一干二净。
TRUNCATE test; //删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在,会重置 AUTO_INCREMENT 的值。
DELETE //仅删除表test内的所有内容,保留表的定义,不释放空间。

修改记录

|代表或
[]里面的内容代表可填可不填
修改数据表名称
第一种方法 ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name 
第二种方法 RENAME TABLE tbl_name TO new_tbl_name

添加字段
ALTER TABLE tbl_name
ADD 字段名称 字段类型 完整性约束条件 [FIRST|AFTER字段名称]

删除字段
ALTER TABLE tbl_name 
DROP 字段名称

添加默认值
ALTER TABLE tbl_name
ALTER 字段名称 SET DEFAULT 默认值

删除默认值
ALTER TABLE tbl_name
ALTER 字段名称 DROP DEFAULT

修改字段类型 约束条件
ALTER TABLE tbl_name
MODIFY 字段名称 字段类型 [约束条件] [FIRST|AFFTER字段名称]

修改字段名称、字段类型、约束条件
ALTER TABLE tbl_name
CHANGE 原字段名称 新字段名称 字段类型 [约束条件] [FIRST|AFFTER字段名称]

//未解决问题
添加主键
ALTER TABLE tbl_name
ADD PRIMARY KEY(字段名称)
删除主键
ALTER TABLE tbl_name 
DROP PRIMARY KEY
添加唯一性
ALTER TABLE tbl_name
ADD UNIQUE KEY|INDEX index_name(字段名称)
删除唯一性
ALTER TABLE tbl_name 
DROP index_name

WHERE条件

会筛选出符合条件的记录
WHERE的条件:
比较运算符 > >= < <= != <>

IS [NOT] NULL加测值是否为NULL或者NOT NULL
SELECT * FROM emp WHERE comm IS NULL; //查询 emp 表中 comm 列中的空值

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值
语法结构
SELECT 字段名称
FROM table_name
WHERE 字段名称 BETWEEN value1 AND value2;
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000; //查询 emp 表中 sal 列中大于 1500 的小于 3000 的值

IN 操作符允许您在 WHERE 条件中规定多个值
语法结构
SELECT 字段名称
FROM table_name
WHERE 字段名称 IN (value1,value2,...);
SELECT * FROM emp WHERE sal IN (5000,3000,1500); //查询 EMP 表 SAL 列中等于 5000,3000,1500 的值
IN 与 = 的异同
相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
不同点:IN可以规定多个值,等于规定一个值

LIKE 操作符用于在 WHERE 条件中搜索列中的指定模式,模糊查询和匹配查询
语法结构
SELECT 字段名称
FROM table_name
WHERE 字段名称 LIKE pattern;
% 表示多个字值,_ 下划线表示一个字符;
M%: 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的内容
%M:表示查询信息为 M 结尾的
%M%: 表示查询包含 M 的内容
%M_: 表示查询以 M 在倒数第二位的内容
_M:表示查询两位且结尾字母是 M 的内容
M_: 表示查询两位且开头字母是 M 的内容
_M_: 表示查询三位且中间字母是 M 的内容
SELECT * FROM emp WHERE name LIKE 'M%'; //查询 EMP 表中 name 列中有 M 的值,M 为要查询内容中的模糊信息

逻辑运算符 AND(逻辑与) OR(逻辑或),
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
逻辑运算的优先级:
() not and or
SELECT * FROM emp WHERE sal > 2000 AND sal < 3000; //查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值 
SELECT * FROM emp WHERE sal > 2000 OR comm > 500; //查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值

不带比较运算符的WHERE:
WHERE并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为 false,当其他值是转化为true。例如:
SELECT 字段名称 FROM student WHERE 0; //则会返回一个空集,因为每一行记录WHERE都返回false
SELECT 字段名称 FROM student WHERE 1;或者 SELECT 字段名称 FROM student WHERE 'abc';
//都将返回student表所有行记录的字段名称的列。因为每一行记录WHERE都返回true

分组

GROUP BY 分组 //把值相同的放到一个组中,最终查询出的结果只会显示组中一条记录
GROUP_CONTACT()查看组中某个字段的详细信息
聚合函数使用:
COUNT()//统计记录总数,如果写的是COUNT(字段名称),字段中的值为空,不统计进来。写COUNT(*)会统计NULL值
SUNM()//求和 
MAX()//求最大值 
MIN()//求最小值 
AVG()//求平均值
配合WITH ROLLUP关键使用会在记录末尾添加一条记录,是上面所有记录的总和
HAVING自居对分组结果进行二次筛选

排序

ORDER BY 关键字用于对结果集进行排序
SELECT 字段名称,...
FROM table_name
ORDER BY 字段名称,... ASC|DESC(升序|降序);

ORDER BY RAND() 随机排列

LIMIT

限制结果集显示条数
LIMIT值 显示结果集的前几条记录
LIMIT offset,row_count 从offset开始,显示几条记录

JOIN

JOIN用于把来自两个或多个表的行结合起来。
JOIN可以分为内连接(INNER)、全外连接(FULL OUTER)、左外连接(LEFT OUTER)、右外连接(RIGHT OUTER)和交叉连接(CROSS)
字段名称包括两个表中的字段名称
内连接:查询两个表中符合链接条件的记录(公共部分)
语法结构 
SELECT 字段名称,... FROM tbl_name1 
INNER JOIN tbl_name2 
ON table1.column_name=table2.column_name;

左外连接:先显示左表中的全部记录,再去右表中查询符合条件的记录,不符合的以NULL值代替 
语法结构 
SELECT 字段名称,... FROM tbl_name1 
LEFT OUTER JOIN tbl_name2 
ON table1.column_name=table2.column_name;

右外连接:先显示右表中的全部记录,再去左表中查询符合条件的记录,不符合的以NULL值代替 
语法结构 
SELECT 字段名称,... FROM tbl_name1 
RIGHT OUTER JOIN tbl_name2 
ON table1.column_name=table2.column_name;

全外连接:左右表的中记录都显示
SELECT 字段名称,... FROM tbl_name1 
FULL OUTER JOIN tbl_name2
ON table1.column_name=table2.column_name;

交叉连接:又称笛卡尔连接或叉乘,如果A和B是两个集合,它们的交叉连接就记为:A*B
SELECT 字段名称,... FROM tbl_name1 
CROSS JOIN tbl_name2
ON table1.column_name=table2.column_name;