高级查询
修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
删除字段
ALTER TABLE 表名 DROP 字段名;
添加主键:
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);
添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)REFERENCES 关联表名(关联字段);
插入单条数据
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
插入多条数据
INSERT INTO 新表(字段名列表)
VALUES(值列表1),(值列表2),……,(值列表n);
将查询结果插入新表:
CREATE TABLE 新表(SELECT 字段1,字段2
……FROM 原表);
INSERT INTO 新表(字段1,字段2……)
SELECT字段1,字段2……
FROM 原表;
更新数据:
UPDATE 表名
SET 字段1=值1,字段2=值2
WHERE 条件
删除数据记录:
DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;
分组查询:
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[HAVING <条件>]
[ORDER BY <排序的字段名> [ASC 或 DESC]]
MySQL查询语句中使用LIMIT子句限制结果集
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT [位置偏移量, ]行数];
-- 聚合函数
-- 查询表中一共有多少条记录
SELECT COUNT(*) FROM student
-- 查看表中指定字段不为空的记录
SELECT COUNT(phone) FROM student
-- 查询年龄最大的数据
SELECT MAX(age) FROM student
-- 查询年龄最小的数据
SELECT MIN(age) FROM student
-- 求所有年龄的平均值
SELECT AVG(age) FROM student
-- 求所有年龄之和
SELECT SUM(age) FROM student
-- 字符串函数
-- 字符串的连接
SELECT CONCAT('My','S','ql');
-- 字符串替换 下标从1开始
SELECT INSERT('大家辛苦了!',1,3,'哈哈');
-- 字符串的截取 下标从1开始
SELECT SUBSTRING('大家辛苦了!',1,3);
-- 字符串变大 小 写
SELECT LOWER('AAA');
SELECT UPPER('aaa');
-- 常用的时间和日期函数
-- 01.获取当前的日期
SELECT CURDATE();
-- 02.获取当前的时间
SELECT CURTIME();
-- 03.获取当前的日期和时间
SELECT NOW();
-- 04.返回日期是一年中的第几周
SELECT WEEK(NOW());
-- 05.只获取年
SELECT YEAR(NOW());
-- 06.只获取小时
SELECT HOUR(NOW());
-- 07.获取两个日期差
SELECT DATEDIFF(NOW(),'2017-03-07');
-- 08.返回现在的时间加上某个时间之后的日期
SELECT ADDDATE(NOW(),24);
-- 数学函数
SELECT CEIL(3.1); -- 天花板函数
SELECT FLOOR(3.9);
SELECT RAND(); -- 0-1之间的随机数
limit :第n业 每业a条 limit (n-1)*a,a;
聚合函数:
函数名
|
作用
|
AVG()
|
返回某字段的平均值
|
COUNT()
|
返回某字段的行数
|
MAX()
|
返回某字段的最大值
|
MIN()
|
返回某字段的最小值
|
SUM()
|
返回某字段的和
|
字符串函数:
函 数 名
|
作 用
|
举 例
|
CONCAT(str1,
str1...strn)
|
字符串连接
|
SELECT CONCAT('My','S','QL');
返回:MySQL
|
INSERT(str,
pos,len,
newstr)
|
字符串替换
|
SELECT INSERT(
'这是SQL Server数据库',
3,10,'MySQL');
返回:这是MySQL数据库
|
LOWER(str)
|
将字符串转为小写
|
SELECT LOWER('MySQL');
返回:mysql
|
UPPER(str)
|
将字符串转为大写
|
SELECT UPPER('MySQL');
返回:MYSQL
|
SUBSTRING
(str,num,len)
|
字符串截取
|
SELECT SUBSTRING(
'JavaMySQLOracle',5,5);
返回:MySQL
|
日期函数:
函数名
|
作用
|
举例(结果与当前时间有关)
|
CURDATE()
|
获取当前日期
|
SELECT CURDATE();
返回:2016-08-08
|
CURTIME()
|
获取当前时间
|
SELECT CURTIME();
返回:19:19:26
|
NOW()
|
获取当前日期和时间
|
SELECT NOW();
返回:2016-08-08 19:19:26
|
WEEK(date)
|
返回日期date为一年中的第几周
|
SELECT WEEK(NOW());
返回:26
|
YEAR(date)
|
返回日期date的年份
|
SELECT YEAR(NOW());
返回:2016
|
HOUR(time)
|
返回时间time的小时值
|
SELECT HOUR(NOW());
返回:9
|
MINUTE(time)
|
返回时间time的分钟值
|
SELECT MINUTE(NOW());
返回:43
|
DATEDIFF(date1,date2)
|
返回日期参数date1和date2之间相隔的天数
|
SELECT DATEDIFF(NOW(),
'2008-8-8');
返回:2881
|
ADDDATE(date,n)
|
计算日期参数date加上n天后的日期
|
SELECT ADDDATE(NOW(),5);
返回:2016-09-02 09:37:07
|
子查询
子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念。
子查询的位置:
select 中、from 后、where 中.group by 和order by 中无实用意义
子查询返回结果
子查询可以返回的数据类型一共分为四种:
- 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;
- 单行多列:返回一行数据中多个列的内容;
- 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
- 多行多列:查询返回的结果是一张临时表;
在WHERE子句中使用子查询
在WHERE子句之中处理单行单列子查询、多行单列子查询、单行多列子查询。
IN子查询:
常用IN替换等于(=)的子查询
IN后面的子查询可以返回多条记录
IN/NOT IN:子查询可返回多条记录