#一个查询语句的基本结构 select [all/distinct] <目标列表达式1>, <目标列表达式2>, ... from <table_name1>, <table_name2>, ... where <条件表达式> group by <column_name1> having <条件表达式> order by <column_name1> [asc/desc] limit (num)
/*选择表中的若干列*/ #如果选中所有的属性列那么用*来表示 #DISTINCT关键词消除取值重复的行,如果没有指定,则缺省为ALL #如果要将属性列更名的话在需要更名的列后面加上 as 新名字 #在查询语句中还可以自定义表名,方法为 from [table_name] as [new_name] #在定义别名的时候可以省略 as ,但是不建议。 #目标列表达式可以为: /* 算术表达式 2016 - Sage 字符串常量 '出生年份:' 函数 year(curdate()) //表示当前的年份 列别名 sno as 学号 */
/* 常用的查询条件: 比较运算符:=,>,<,>=,<=,!=,<>,!>,!<; 确定范围: BETWEEN <..> AND <..>, NOT BETWEEN <..> AND <..> 确定集合: IN(...), NOT IN(...) 字符匹配: LIKE '', NOT LIKE '' 通配符: % 任意长度的字符 _ 一个长度的字符 / 将后面紧跟的一个符号转义成正常符号 空值: IS NULL, IS NOT NULL 多重条件(逻辑运算): AND,OR,NOT 可以用括号改变优先级 */
/*ORDER BY子句*/ #可以按照一个或者多个属性进行排序 #升序:ASC;降序:DESC;缺省值为升序 #当排序列含空值时 #ASC:排序列为空值的元组最后显示 #DESC:排序列为空值的元组最先显示 #e.g. ORDER BY Grade DESC; #e.g. ORDER BY Sdept,Sage DESC; #limit后面跟的数字为输出表中的前几行。
/*自然连接*/ SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno = SC.Sno; #将student和sc表将sno相同的元组自然连接然后输出
/*聚集函数*/ #聚集函数: /* 计数 COUNT([ DISTINCT | ALL ] *) COUNT([ DISTINCT | ALL ] <列名>)//这两个值在all条件下是相等的 计算总和 SUM([ DISTINCT | ALL ] <列名>) 计算平均值 AVG([ DISTINCT | ALL ] <列名>) 最大最小值 MAX([ DISTINCT | ALL ] <列名>) MIN([ DISTINCT | ALL ] <列名>) */
/*连接查询*/ #将两个表进行自然连接 select * from A, b where A.a = B.a; #将三个表进行自然连接 select * from A, B, C where A.a = B.a and A.a = C.a; #将一个表进行自身连接 select A.a, A.pa, B.pa from table1 as A, table1 as B where A.pa = B.a; /* [例35]查询每一门课的间接先修课(即先修课的先修课),输出:课程号、先修课的课程号、先修课的先修课的课程号。 */ /* SELECT FIRST.Cno, FIRST.Cpno, SECOND.Cpno FROM Course As FIRST,Course As SECOND WHERE FIRST.Cpno = SECOND.Cno; */ #两个表用inner join来写自然连接 select * from A inner join B on (A.a = A.b) where ... #两个表用left outer join来写左外连接 select * from A left outer join B on(A.a = B.a) where ... #两个表用right outer join来写右外连接 select * from A right outer join B on(A.a = B.a) where ... #嵌套查询 /*将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询*/ #不相关子查询 select * from A where a in ( select a from B where ... ); #相关子查询 select * from A where a in ( select a from B where A.b = B.b and ... ); /*可以进行多层嵌套,当可以确定内层返回为单值的话,in可以用=或者<,>等代替。*/ #带有ANY和ALL谓词的子查询 select * from A where a >= ANY( select a from B where ... ); /*ANY表示查询结果中的某个值,ALL表示查询结果中的所有值*/ #带有EXISTS谓词的子查询 /*存在谓词谓词的查询不返回任何数据,只产生逻辑真值或者逻辑假值,若内层查询为空则返回假,若内层查询为非空则返回为真。 EXISTS内层只要有结果,外层对应的记录就输出。 NOT EXISTS内层只要没有结果,外层就被输出。 */ select * from A where exists ( select * from B where ... ) #集合查询:交并差查询 #Union, Intersect, Except。 /**/
Delete命令
1 2 3 4 5
#带查询的删除(删除满足条件的元组) delete from [table_name] where ... #where中的语句格式和select的where一样。
其他常用命令
1 2 3 4 5 6 7
show databases; select database(); use [database_name]; DESC [table_name];#查看该表的结构 select user();#查看当前用户 select * from mysql.user #查看所有用户 #用户授权
数据类型
1 2 3 4 5 6
int smallint char([num]) varchar([num])#变长字符串 date enum(a, b, ...) #枚举类型,值只能是枚举集合中的一个元素
常用约束条件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
default [val] # 默认值 unique # 唯一性约束 not null # 非空值约束 primary key([column_name],...) # 主码约束 foreign key([column_name]) references [table_name]([column_name]) # 外键约束 chekc([条件]) # 用户定义 auto_increment # 序号自动加一 constraint [constraint_name] <限制条件> # 为后面的限制条件起一个名字 on delete no action cascade set null #在外键被参照的元组的属性进行删除时进行参照的元组的属性值的变化情况 on update no action cascade set null #针对外键被参照的元组的属性进行更新值时进行参照的元组的属性值的变化情况