My SQL高级查询

一、高级查询

1.修改表名

ALTER TABLE demo RENAME TO `demo1`;

2.添加字段

ALTER TABLE demo1 ADD `password` VARCHAR(30) NOT NULL;

3.修改字段

ALTER TABLE demo1 CHANGE `name` `username` VARCHAR(30) NOT NULL;

4.删除字段

ALTER TABLE demo1 DROP `password`;

5.添加外键
1.外键在从表上创建
2.创建外键时表不可以有数据
3.两张表关联的列所有特性必须完全一致,列明可以不相同
4.创建外键后,两张表的增删改功能会被关联
5.删除主表数据,必须先删除从表相关的数据grade

ALTER TABLE student ADD CONSTRAINT fk_grade_student FOREIGN KEY `gradeid` REFERENCES grade(`gradeid`);

6.清空表
1.delete:自增长列已经使用过的数据会永久丢失 1-100
2.truncate:自增长的列会重新从1开始排序

DELETE FROM student;
TRUNCATE TABLE student;
SELECT * FROM student;

7.DQL:数据查询语言
1.select 查询内容 from 表名
2.where 查询条件
3.group by 分组依据
4.order by 排序依据 desc/asc
5.limit 起始行下标 返回的行数
8.聚合函数

函数名 作用
avg 返回某字段的平均数
sum 返回某字段的和
count 返回某字段的数量
min 返回某字段的最小值
max 返回某字段的最大值

9.连接查询
1.内连接:inner join
2.外连接:
左外连接:left join 以左表为主表向右表的数据进行逐次匹配
右外连接:right join 以右表为主表向左表的数据进行逐次匹配
3.查询学生的姓名、学号、成绩

SELECT s.`studentName`,s.`studentNo`,r.`studentResult` FROM student s 
INNER JOIN result r ON s.`studentNo`=r.`studentNo`;

4.查询及格的学生姓名、学号、成绩

SELECT s.`studentName`,s.`studentNo`,r.`studentResult` FROM student s 
INNER JOIN result r ON s.`studentNo`=r.`studentNo` 
WHERE r.`studentResult`>=60;

10.日期函数
获取年月日信息
SELECT CURDATE();
获取时分秒信息
SELECT CURTIME();
获取详细的时间和日期信息
SELECT NOW();
获取某个时间是一年中的第几周
SELECT WEEK(NOW());
计算两个时间之间间隔的天数
SELECT DATEDIFF(NOW(),‘2002-7-10’);
推算日期
SELECT ADDDATE(NOW(),1000);
11.数学函数
向上取整
SELECT CEIL(34.4);
向下取整
SELECT FLOOR(35.9);
随即小数 0-1
SELECT RAND();

二、子查询

=:只能和单个数据进行等值比较
in:可以和多个数据进行等值比较
not in:除此以外
1.exists:判断是否存在/是否有结果

CREATE DATABASE IF NOT EXISTS testinfo;
DROP DATABASE IF EXISTS student;

2.EXISTS:只关心子查询语句是否有数据返回,如果有则执行前面的sql语句 否则不执行

SELECT * FROM student WHERE  EXISTS
(SELECT studentno FROM result WHERE 1=2);

3.子查询:在增删改查语句中嵌套使用select语句

SELECT * FROM student WHERE bornDate>
(SELECT bornDate FROM student WHERE studentName = '肖梅');

4.删除比肖梅小的学生

DELETE FROM student WHERE bornDate>
(SELECT bornDate FROM student WHERE studentName = '肖梅');

你可能感兴趣的:(笔记)