/*
2:小数位数
4:精度:小数位+整数位
decimal(4,2):100?//numeric
char(6) 'hello '
varchar(6) 'hello'
*/
/*
主键(primary key):
1.不能为空(null)
2.必须唯一
创建外键,外键一定是创建在外键表上
*//*区分连接查询时两个表有同名的字段,指定表的限定名,
连接本质上是个笛卡尔乘积(查询学生号,学生名,考试成绩)*/
/*
插入数据的顺序:先插入主键表记录,再插入外键表记录.
删除数据的顺序:先删除外键表记录,再删除主键表记录.
*/
#字符串函数
SELECT concat('My','S','QL') as concat;#MySQL
SELECT insert('这是SQL Server数据库',3,10,'MySQL');#这是MySQL数据库
SELECT lower('MySQL');
SELECT upper('MySQL');
SELECT substring('JavaMySQLOracle',5,5);
SELECT replace('www.mysql.com', 'w', 'Ww');
#时间日期函数
SELECT CURDATE();
SELECT CURTIME();
select now(),current_timestamp;
SELECT WEEK(NOW());
SELECT YEAR('2008-08-08');
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT DATEDIFF(NOW(),'2008-8-8');
SELECT ADDDATE(NOW(),-5);
select month(now());
select day(now());
select quarter(now()),quarter('2019-04-04');
#数学函数
SELECT ceil(3.14);
SELECT floor(3.14);
select rand();#[0,1)伪随机数
#聚合函数会忽略null值
avg(),max(),min(),sum()
/*
select语句执行的逻辑顺序:
1.from:查询表中的所有记录,生成结果集
2.join:根据连接条件,生成结果集
3.where:对第2步生成结果集用where后面的
条件表达式对每一条记录进行筛选
4.group by:分组后只能对组进行操作,select子句中只能出现分组的列
或聚合函数
5.having:对组进行筛选
6.select:输出查询结果
7.order by:对输出的查询结果进行排序
引用自定义名要注意,在查询中不能引用,查询结果后可引用
先看from,再select,
*/
/*查询年级总人数小于3的年级名称(having)----对组进行筛选,作用同where
输出(年级名称,人数)---where不能对组筛选,count里面不为空即可
*/
#可省略
as,inner,outer,asc
#不可省略
desc#降序
#2.子查询,先内后外,多条记录用in
#case语法
select studentname,#需要,
case
when studentresult >=90 then 'A'#没有,
when studentresult between 80 and 89 then 'B'
when studentresult between 70 and 79 then 'C'
when studentresult between 60 and 69 then 'D'
else 'E'
end '等级'#相当于查询的字段
from student join result
on student.studentno=result.studentno
join course
on result.subjectno=course.subjectno
where #result
result.subjectno=
(select subjectno from course where subjectname='java')
and
examdate=
(select max(examdate) from result join course
on result.subjectno=course.subjectno
where subjectname='java'#Java课程最近一次考试时间
);
#limit的mysql特有
limit m#前m条记录
limit m,n#m代表开始的索引(从0开始),n-查询的记录数
#m=9,即从第10条开始