目录
7、更新:使得不改变整个元组的情况下改变其部分属性的值 update
12、空值:SQL将涉及空值的任何比较运算的结果视为unknown
14、自然连接:只考虑那些在两个关系模式中都出现的属性上取值相同的元组对 natural join、join...using
15、聚集函数:以值的一个集合(集或多重集)为输入、返回单个值的函数
16、分组聚集 group by:该子句中所有属性上取值相同的元组将被分在一个组中
17、having子句:用group by形成分组后,对分组进行限定
24、with子句:定义临时关系,这个定义只对包含with子句的查询有效
1、查询所有的数据库
show databases;
2、指明使用哪个数据库
不指名的话,可能无法进行下面的种种操作
use database_name; -- database_name为数据库名
3、新建表( create table)
create table 表名1(
属性A1 类型D1,
属性A2 类型D2,
…………
属性An 类型Dn,
主键(Ax1,Ax2,……,Axn)
外键(Ak1,Ak2,……,Akn) references 表名2(Ak1,Ak2,……,Akn));
有外键就写,没有就可以省略。其中使用外键时要注意
- 参照表的字段是否存在
- 外键字段在其他表上是主键
- 字段类型一定要一样
create table department
(dept_name varchar(20),
building varchar(15),
budget numeric(12,2),
primary key(dept_name));
create table course
(course_id varchar(7),
title varchar(50),
dept_name varchar(20),
credits numeric(2,0),
primary key(course_id),
foreign key(dept_name) references department(dept_name));
4、插入数值 insert
插入数值时,如果插入的表有外键的话,要保证插入的外键值在以该外键为主键的表中存在,否则会出现以下类似错误,无法正确的插入
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`t`, CONSTRAINT `t_ibfk_1` FOREIGN KEY (`dept_name`) REFERENCES `department` (`dept_name`))
insert into table_name values(数据1,数据2,……,数据n); -- 对单个元组的插入请求
insert into table_name(A1,A2,...,An) values(数据1,数据2,...,数据n); -- 指定属性进行插入
insert into table_name select A1,... from tb1 where P; -- 在查询结果的基础上插入元组
没被插入的值用null表示,赋予空值
insert into department values('Comp.Sci.','Taylor',65000);
-- -------------------------------------------------------
insert into course(course_id,title,det_name,credits)
values('CS-437','Database Systems','Comp.Sci.',4);
-- -------------------------------------------------------
insert into instructor
select ID,name,dept_name,18000
from student
where dept_name = 'Music' and tot_cred > 144;
5、删除表
- 用delete时,保留表中的关系,删除表中的所有元组
delete from table_name; -- table_name为表名 删除表中所有元组
delete from table_name where P; -- 找出使P为真的元组
- 用drop时,不仅删除表中所有元组,还删除表中的关系。一旦使用了该语句,除非用create table重新建该表,否则没有元组可以插入到该表中。
drop table table_name; -- table_name为表名
6、修改属性 alter
(1)为已有关系的表增加属性
alter table tb1 add A D; -- tb1为表名 A为添加的属性 D为添加属性的类型
(2)为已有关系的表去掉属性
alter table tb1 drop A; -- tb1为表名 A为要删除的属性
7、更新:使得不改变整个元组的情况下改变其部分属性的值 update
update tb1 set P;
update tb1 set P where P1;
update instructor set salary = salary * 1.05 where salary < 7000;
case语句:可以利用它在一条update语句中执行多种更新,并避免更新次序引发的问题
case
when pred1 then result1
when pred2 then result2
......
when predn then resultn
else result0
end
update instructor
set salaty = case
when salary <= 10000 then salary * 1.05
else salary * 1.03
end
8、更名运算----重命名 as
old-name as new-name
(1)把一个长的关系名换成短的,在查询其他地方使用起来更加方便
(2)适用于需要比较同一个关系中的元组的情况
select T.name, S.course_id
from instructor as T, teaches as S
where T.ID = S.ID;
-- 由于执行顺序为from---where---select,因此可以在更名后使用T和S
-- ----------------------------------------------------------
select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';
9、字符串运算
- SQL使用一对单引号来标示字符串,若单引号是字符串的组成部分,则用两个单引号字符来标示 eg:'it''s right'
- 字符串上的相等运算是大小写敏感的 eg:'Comp.Sci.'不等于'comp.sci.'
模式匹配
(1)like
- 百分号(%):匹配任意子串
- 下划线(_):匹配任意一个字符
(2)escape——使得模式中能够包含特殊模式(%和_ÿ