数据库基础语句
⽂章⽬录
DDL
DDL(数据库定义语⾔),⽤于数据库、表、列、索引等数据库对象的定义(创建)和结构的修改。
数据库
创建:create database 数据库名
删除:drop database 数据库名
改变使⽤的数据库:use 数据库名
创建:create table 表名( 〈列名〉〈数据类型〉〈列级完整性约束条件〉…… CONTRAINT〈约束名〉〈表级完整性约束条件〉……) 列级约束条件 NOT NULL 或 NULL NOT NULL约束不允许字段值为空,⽽NULL约束允许字段值为空。UNIQUE 惟⼀性约束,即不允许列中出现重复的属性值。PRIMARAY KE
Y [CLUSTERED|NON CLUSTERED] 定义该字段为主码并建⽴聚集(⾮)索引。
1、多个属性构成的主码只能通过表级约束条件定义:PRIMARY KEY (Sno,Cno)
2、单个属性构成的主码可通过列级或表级约束条
件定义:Sno CHAR(9) PRIMARY KEY 或 PRIMARY KEY (Sno)DEFAULT 默认值约束。 DEFAULT 默认值 DEFAULT〈约束名〉〈默认值〉FOR〈列名〉CHECK 检查约束。CONSTRAINT〈约束名〉CHECK (〈约束条件表达式〉) 1、单⼀属性设限CONSTRAINT C2 CHECK(性别 IN (‘男’,‘⼥’)) CONSTRAINT C3 CHECK(成绩 BETWEEN 0 AND 100) 2、多属性之间设限 CHECK (Ssex=‘⼥’ OR Sname NOT LIKE ‘Ms.%’)identity(初值,步长) 定义字段为数值型数据,并指出它的初始值和逐步增加的步长值reference 参照表(对应字段) 定义该字段为外码,并指出被参照表及对应字段AUTO_INCREMENT 设置该字段为⾃增字段 表级约束条件 UNIQUE(列1, 列2, …)PRIMARY KEY[CLUSTERED|NON CLUSTERED](列1, 列2, …)check(条件表达
式)FOREIGN KEY CONTRAINT〈约束名〉FOREIGN KEY(〈外码〉) REFERENCES〈被参照表名〉(〈与外码 对应的主码名〉) 删除表:drop table 表名修改表的约束or属性:alter table 表名 [rename 新表名] 更改表名 [add column 列名 类型 约束 or
CONSTRAINT 约束名 约束定义] 增加字段或者字段和表的约束 [drop column 列名 or CONSTRAINT 约束名] 删除字段或约束[alter] 增加字段宽度或约束,⼀般不允许修改和减少,也不能改动字段标识 [modify] 修改字段类型和约束,不能改动字段标识[change] 修改字段类型和约束,允许修改字段标识。后⾯要写两次列名,⽐较⿇烦。 {check|nocheck}constraint{all|约束名组}使约束有效或⽆效(check使之有效,nocheck使之⽆效,all指全部约束) first after:配合add、alter、modify、change使⽤,⽤于改变列的位置
索引
创建:
create [UNIQUE] [CLUSTERED|NONCLUSTERED]
index〈索引名〉 ON〈表名〉(〈列名〉[〈次序〉][,〈列名〉[〈次序〉]]…);
UNIQUE 建⽴唯⼀索引,不允许有两⾏具有相同索引值 CLUSTERED|NONCLUSTERED 建⽴聚集或者⾮聚集索引,每张
表只能有⼀个聚集索引,默认值为⾮聚集索引
alter table 表名 add [UNIQUE|FULLTEXT] index 索引名 [using [BTREE|HASH]] (列名);
create table 表名{
学号 char(6),
课程号 char(3),
成绩 tinyint(1),
学分 tinyint(1),
primary key(学号,课程号);
index cj(成绩)//index 索引名 [索引类型] (索引列名)
}
删除:drop index 索引名
查看:show index in 表名
DML
DML(数据库操纵语⾔),⽤于实现对数据库表的内容(⽽⾮结构)的增删改查功能。
增加⾏ INSERT INTO〈表名〉[(〈属性列1〉[,〈属性列2〉…)](不指定属性列时,需要把所有列都⼀⼀对应地写上) VALUES (〈常量1〉[,〈常量2〉]…),    (〈常量1〉[,〈常量2〉]…)…… 或 INSERT INTO〈表名〉[(〈属性列1〉[,〈属性列2〉]…)]〈⼦查询〉
如果想实现表中有重复的记录,则忽略本次插⼊的功能,可以通过INSERT IGNORE来实现这个功能:
INSERT IGNORE INTO 〈表名〉
如果想实现表中有重复的记录,则更新成本次插⼊的功能,可以通过INSERT ... ON DUPLICATE KEY UPDATE来实现这个功能:
INSERT INTO first_table (first_column, second_column) VALUES(1, ‘哇哈哈’) ON DUPLICATE KEY UPDATE second_column
= ‘雪碧’;
这个语句的意思就是,对于要插⼊的数据(1, ‘哇哈哈’)来说,如果first_table表中有某些重复的记录,那就把记录的second_column列更
新为’雪碧’
INSERT INTO first_table (first_column, second_column) VALUES(1, ‘哇哈哈’) ON DUPLICATE KEY UPDATE second_column
= VALUES(second_column);
遇到重复记录时把该重复记录的second_column列更新成准备插⼊的记录中的值
删除⾏ DELETE FROM〈表名〉[WHERE〈条件〉];
修改某⼏⾏的属性值 UPDATE〈表名〉 SET〈列名〉=〈表达式〉[,〈列名〉=〈表达式〉][,…n] [where]
查⾏
查询-注意事项
1. SELECT  〈属性1,属性2,……〉(可以使⽤distinct、top等关键字)
from 表1,表2,……(可以有多个表,结果是笛卡尔乘积;可以是左右连接)where 元组需要满⾜的
条件(可以⽤in)2. 可以对同⼀个列重复查询显⽰
3. select后⾯的列是什么,临时表的列名就是什么
查询-执⾏顺序
SQL语⾔不同于其他编程语⾔的最明显特征是处理代码的顺序(书写查询语句也需要符合顺序)。在⼤多数据库语⾔中,代码按编码顺序被处理。但在中,第⼀个被处理的⼦句式FROM,⽽不是第⼀出现的SELECT。SQL查询处理的步骤序号:
(7)SELECT 投影,不删除结果中相同元组(注意,和关系运算中的投影π不同,π会删除结果中相同元素,相当于select distinct)(9) DISTINCT|TOP (11) <TOP_specification> <select_list>(12) INTO tablename 将结果保存到新表中(1) FROM <left_table> 笛卡尔乘积
(3) <join_type> JOIN <right_table> 隐含的筛选条件(2) ON <join_condition> 筛选条件
(4) WHERE <where_condition> 筛选条件(5) GROUP BY <group_by_list> 分组(6) WITH {CUBE | ROLLUP}
(8) HAVING <having_condition> 筛选条件
(10) ORDER BY <order_by_list> ASC|DESC 排序条件
查询-分类
简单查询 查询过程中只涉及到⼀个表的查询
连接查寻 where⼦句中,使⽤=的连接查询 ⾃⾝连接:MySQL服务器会把名称⼀样的表当作是⼀个表处理,名称不同的当做不同的表处理。下⾯的语句中,t1和t2会都被当做不同的表(相当于赋值了⼀个和test⼀样的表,和test进⾏连接查询),查询结果是两个test 笛卡尔乘积后,留下满⾜条件的结果。 select * from test as t1, test as t2 where t1.num=t2.num; 下⾯的语句中,是⼀个表,查询结果为test原表 select * from test as t1, test as t2 where t1.num=t2.num; 1234 复合连接:多个表的=连接 from⼦句中,使⽤join的连接查询 内连接:使⽤innner join 或 cross join 或 join,等效于 from t1,t2。 后可跟连接条件:where 连接条件, on 连接条件, using 相同列名外连接:使⽤了full join、left join、right join的全、左、右外连接查询 后只能跟连接条件: on 连接条件(on后⾯可再加where,但是不能直接⽤where)交叉连接:使⽤了cross join的交叉连接查询。返回被连接的两个表的笛卡尔积,返回结果的⾏数等于两个表⾏数的乘积。
嵌套查询 引出了⼦查询概念。⼀个select from where成为⼀个查询块。 按照使⽤的运算符分类: 使⽤⽐较运算符(如> < =)连接⼦查询select使⽤范围运算符(如in,any,all,exists)连接⼦查询sel
ect 按照⼦查询和⽗查询的依赖关系分类: 相关⼦查询:⼦查询的查询条件依赖于⽗查询。依次取⽗查询中每⼀个元组,处理内查询,为真则保留结果。 执⾏过程: (1)从外层查询中取出⼀个元组,将元组相关列的值传给内层查询。 (2)执⾏内层查询,得到⼦查询操作的值。 (3)外查询根据⼦查询返回的结果或结果集得到满⾜条件的⾏。 (4)然后外层查询取出下⼀个元组重复做步骤1-3,直到外层的元组全部处理完毕。 ⾮相关⼦查询:⼦查询条件不依赖与⽗查询。即⼦查询可以完全脱离⽗查询单独执⾏。
集合查询 使⽤了union(并)、intersect(交)、minus(差)关键字的查询。 注意: 查询的结果集中显⽰的列名将以第⼀个查询中的列名为准。被合并的各个查询的查询对象个数必须相同,类型不必完全相同。单独使⽤,系统会⾃动去掉重复的元组。union all则会保留重复的元素。有的数据库没有intersect和minus,需要通过exists实现差和交操作。分组查询 使⽤了group by的查询
SELECT TOP ⼦句
SELECT TOP ⼦句⽤于规定要返回的记录的数⽬。并⾮所有的数据库系统都⽀持 SELECT TOP 语句。
select  num ,num from  strudentInfo ;
1
select  列1,列2的表达式,……
查询结果中,列名就是: 列1,列2的表达式,……
12
数据库
选取前⼏列的实现⽅式SQL Server / MS Access
SELECT TOP 语句
MySQL LIMIT 开始⾏(从0开始),限制条数
Oracle
ROWNUM 语句
例⼦:从"Customers"表中选择前三个记录:
例⼦:从"Customers"表中选择记录的前50%:
查询-运算符
假设变量 a 的值为 10, 变量 b 的值为 20
算数运算符
操作符描述
⽰例+相加:将符号两边的数值加起来。  a + b 得 30-相减:从最边的操作数中减去右边的操作数。
a -
b 得 -10*相乘:将两边的操作数相乘。  a * b 得 200/相除:⽤右边的操作数除以左边的操作数。
b / a 得 2DIV 相除:取商的整数部分。
b / a 得 2%
取余:⽤右边的操作数除以左边的操作数,并返回余数。
b % a 得 0
⽐较运算符
操作符描述
⽰例
=检查两个操作数的值是否相等,是的话返回 true。(a = b) 不为 true。!=检查两个操作数的值是否相等,如果不等则返回 true。(a != b) 为 true。<>检查两个操作数的值是否相等,如果不等则返回 true。(a<>b) 为真。>
检查左边的操作数是否⼤于右边的操作数,是的话返回真。
(a > b) 不为 true。
<;检查左边的操作数是否⼩于右边的操作数,是的话返回真。(a < b) 为 true.>=检查左边的操作数是否⼤于或等于右边的操作数,是的话返回真。(a >= b) 不为 true。<=检查左边的操作数是否⼩于或等于右边的操作数,是的话返回真。(a <= b) 为 true.!<;检查左边的操作数是否不⼩于右边的操作数,是的话返回真。(a !< b) 为 false.!>
检查左边的操作数是否不⼤于右边的操作数,是的话返回真。
(a !> b) 为 true。
# SQL Server / MS Access
SELECT  TOP  3 * FROM  Customers ;# MySQL
SELECT  * FROM  Customers LIMIT  3;#  Oracle
SELECT  * FROM  Customers WHERE  ROWNUM <= 3;
12345678
SELECT  TOP  50 PERCENT  * FROM  Customers ;
1
操作符描述⽰例逻辑运算符
操作符描述
AND AND运算允许多个条件在SQL语句中,存在WHERE⼦句
OR OR运算符是⽤来多个条件WHERE⼦句结合起来的SQL语句
NOT NOT是⼀个否定运算符。例如:NOT EXISTS,NOT BETWEEN,NOT IN,NOT LIKE等
groupby是什么函数范围运算符
操作符描述
BETWEEN BETWEEN运算符⽤于搜索是在⼀组值的那个值,给定的最⼩值和最⼤值
EXISTS代表存在,exists操作符后⼦查询结果集如果不为空(即只要存在⼀条满⾜),则返回true,否则返回false IN IN运算符⽤于⼀个值进⾏⽐较,以已被指定的⽂字值的列表
ALL ALL运算符是⽤来在另⼀个值设定⽐较值的所有值,可以和⽐较运算符⼀起使⽤
ANY ANY运算符⽤于根据条件在列表中的值进⾏⽐较的任何应⽤值,可以和⽐较运算符⼀起使⽤SOME⼀些,可以和⽐较运算符⼀起使⽤
字符串运算符
操作符描述
+连接
LIKE LIKE运算符⽤来⽐较使⽤通配符运算符相似的值
其他运算符
操作符描述
IS NULL NULL运算符⽤来⽐较⼀个NULL值
UNIQUE UNIQUE操作搜索指定表的每⼀⾏的唯⼀性(不重复)
查询-通配符
如果需要匹配 % 和 _ ,则需要使⽤ \ 进⾏转义。
通配符描述
%替代 0 个或多个字符
_替代⼀个字符
[charlist]字符列中的任何单⼀字符
[^charlist] 或 [!charlist]不在字符列中的任何单⼀字符
查询-聚集函数
函数描述

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。