目录
一、数据库基础知识
二、操作语句
创建模式
创建表
修改表
删除
约束
索引
查询
查询条件
Order by
聚集函数
Group by
连接查询
嵌套查询
create schema test0402;
use test0402;
createtable Course(
Cno char(4) primary key,
Cname char(40) ,
Cpno char(4),
Ccredit smallint,
foreignkey (Cpno) references Course(Cno));
Alter table Student add S_entrance datetime;
alter table course add UNIQUE(Cname);
alter table course drop index Cname;
Droptable 表名cascade/restrict
Cascade删除没有限制,相关依赖全部删除
Restrict删除有条件限制,待删除的表不能有约束(check、foreign key等),不能有视图、触发器、存储过程或者函数等
drop database
truncate tabe tbalename(仅仅删除表格中的数据)
Not null |
建表时添加,create table ###(name_id cahr(52) not null...) |
unique |
(单个列)建表时添加,create table a (列1,类型,列2,类型,...... unique(列1));建表后,alter table a add unique(列2) (2)多列且命名。建表时,create table a (列1,类型,列2,类型,...... constraint c_person unique(列1,列2) ) 建表后,alter table 1 add constraint c_person unique(列1,列2) ) (3)删除 alter table a drop index c_person |
Primary key |
(1)CREATE TABLE Persons (......PRIMARY KEY (Id_P)) (2)CREATE TABLE Orders (......CONSTRAINT pk_PerOrders PRIMARY KEY (Id_P)) (3)ALTER TABLE Orders ADD PRIMARY KEY (Id_P) (4)ALTER TABLE Orders ADD CONSTRAINT pk_PerOrders PRIMARY KEY (Id_P) (5)ALTER TABLE Orders DROP PRIMARY KEY pk_PerOrders
|
Foreign key |
(1)CREATE TABLE Orders (....FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)) (2)CREATE TABLE Orders (......CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)) (3)ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) (4)ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) (5)ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders |
check |
对特定列进行约束其取值范围 (1)CREATE TABLE Persons ( ... CHECK (Id_P>0) ) (2)ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') (3)ALTER TABLE Persons DROP CHECK chk_Person |
default |
插入默认值 (1)CREATE TABLE Persons ( ......, City varchar(255) DEFAULT 'Sandnes' ) (2)ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES' (3)ALTER TABLE Persons ALTER City DROP DEFAULT
|
carete index on tbalename(colname)
create unique indec on tablename(colname)
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)
alter table tablename drop index indexname
Select[distinct/all(默认all)] 列/列/列 from 表名/视图名
[where 条件表达式]
[gruopby 列名[having 条件表达式]]
group by 分组,having 控制分组条件,用COUNT()函数和GROUP BY语句可以统计同一值的记录条数
[orderby 列名[ASC(默认升序)/desc]]
(1)确定范围
between下限 and 上限 (两端都包含)
Notbetween 下限 and 上限
(2)比较大小
=,>,<,<>(不等于),!=,>=,<=,!>(不大于),!<(不小于)
(3)确定集合
In和 not in
(4)字符匹配
notlike/Like <匹配串>[escape<换码字符串>]
% | 任意长度的字符串 |
_ | 任意单个字符串 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
一个汉字占两个字符的位置
***like‘db|_d’escape ‘\
查询db_d的相关信息,用escape声明’\’后的只是普通字符,不具有通配符含义
(5)涉及空值的查询
Select*from sc where grade is null(is notnull)
(6) 多重条件查询
And 和or连接多个查询条件。And优先级较高
(7)where后避免对字段进行函数操作,否则会使字段上的索引失效,全表扫描,降低查询速度
按照查询结果对多个属性列排序(升序asc默认/降序desc)
空值,升序在后,降序最先显示
注意:where 后不可以跟聚集函数作为条件表达式
除了count(*),其他都跳过空值不处理
count([distinct|all] *) |
统计元组个数 |
count([distinct|all] 列名) |
统计一列中值得个数 |
Sum([distinct|all] 列名) |
求和(数值型) |
AVG([distinct|all] 列名) |
求平均(数值型) |
max([distinct|all] 列名) |
最大值 |
min([distinct|all] 列名) |
最小值 |
将查询结果按一列或多列的值分组,值相等的为一组
分组后,聚集函数将作用于每一组。否则,作用于整个查询结果
Where 和 having的区别:
Where作用于基本表或者视图,选择满足条件的元组;
Having 作用于组,选择满足条件的组
等值与非等值 |
等值 = |
非等值 不是= |
|
自身连接 |
自己和自己 |
外连接 |
左外连接(列出左边全部,右边缺失的填补null) Left outer join |
右外连接(列出右边全部,左边缺失的填补null) Right outer join |
|
复合连接 |
Where后面跟多个连接条件 |
(1)上层/下层子查询
上层查询:父查询或者外层查询
下层查询:子查询或者内层查询
子查询中不能使用order by,order by只能对最终查询结果排序
有些嵌套查询可以用连接运算替代
(2)相关/不相关子查询
不相关子查询:子查询的查询条件不依赖与父查询(一下子将子查询求解出来)
相关子查询:子查询的查询条件依赖于父查询(反复求值,先取父查询中的一个元组,遍历内层查询,再从外层查询中取出一个元组,遍历内层查询。。。)
(3)带有any/some/all的子查询:
子查询跟在比较运算符之后,只有返回的是单值的时候可以用比较运算符
返回多值时,要用any(有些用some)或者all,且和比较运算符搭配使用
(4)带有exists的子查询
返回true或者false,只关心内层操作是否有返回值
(5)in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。 not in 逻辑上不完全等同于not exists,如果你误用了not in,小心你的程序存在致命的BUG:
(6)集合查询
Uninon 并集 uninon all 并集,保留重复值
Intersect 交集
Except 差操作