前言
本文主要记录一些数据库常规的语法
提示:以下是本篇文章正文内容,下面案例可供参考
一、数据库
1、创建数据库
语法:
create database 数据库名
on(<文件格式>...)
log on(<文件格式>...)
示例:创建一个名为Sales的数据库
create database Sales
on
(name = Sales_dat,
filename =' ' ,
size = 10,
maxsize = 50,
filegrowth = 5)
log on
(name = 'Sales_log',
filename = '',
size = 5mb,
maxsize = 25mb,
filegrowth = 5mb)
2、删除数据库
语法:
drop database 数据库名
示例:删除一个名为Sales的数据库
drop database Sales
二、表
1.创建表
语法:
create table <表名>(
<列名1> <数据类型> [列级完整性约束定义]
<列名2> <数据类型> [列级完整性约束定义]
...)
约束:
not null 非空约束,限定某列的值不允许为空
unique 限定某一列的取值唯一
primary key 主键
check 限定取值范围
default 设定某一列的默认值
foreign key 外键
示例:创建book表
create table book(
book_ID char(10) primary key,
name varchar(30) not null,
author varchar(10),
publish varchar(20),
price decimal(6,2) check(price>0),
classify varchar(20)
)
2.删除表
语法:
drop table <表名>
示例:删除book表
drop table book
3.修改表结构
表中列的修改 语法:
alter table <表名>
alter column <列名> <新数据类型>
add <列名> <数据类型> [约束]
drop column <列名>
示例:
alter table Reader
add profession char(20)
alter table Reader
alter column profession char(30)
alter table Reader
drop column profession
表中约束的修改 语法:
alter table <表名>
with check(oncheck)
add constraint <约束>
drop constraint <约束>
示例:
alter table student
with check
add constraint check_year check(check_year>15)
alter table student
drop constraint df_deopt
三、查询操作
1、select的基本结构
select <目标列名序列> from <数据源>
{where <条件>
group by <分组依据列>
having <组提取条件>
order by <排列依据>}
2、select子句
语法一:select接列名
select <列名> from <表名>
示例:
select name,author,price from book
select * from book
语法二:不显示重复结果
如果在查询结果中重复数据不想显示出来,可以用distinct关键字
重复显示可以用all关键字
示例:
select distinct sex from reader
select all sex from reader
语法三:列表达式
select后面可以跟加减乘除表达式、计算函数和常量
示例:
select book_ID,name,price*0.9 from book
语法四:列更名
旧列名| 表达式 as 新列名
或:新列名 = 旧列名 | 表达式
示例:
select boo_ID as 编号, name as 姓名, author as 作者 from book
3、where子句
where子句中可以使用的查询条件
比较运算 =, >, >=, <, <=, <>(或!=)
确定范围 between and, not between and
确定集合 in, not in
字符匹配 like, not like
空值 is null, is not null
多重条件 and, or, not
语法一:比较运算
等于(=), 大于(>), 大于等于(>=), 小于(<), 小于等于(<=), 不等于(<>或!=), 取反(not)
示例:
select * from reader where sex='女'
语法二:between…and…
between <下限值> and <上限值>
not between <下限值> and <上限值>
示例:
select * from book where price between 25 and 50
select * from book where price not between 20 and 30
语法三:in
限定属性的取值在指定集合中
示例:
select * from book
where publish in('机械工业出版社','清华大学出版社','高等教育出版社')
语法四:like
模糊查询
列名 like <字符串>
字符串中可以用通配符:
_表示任意一个字符
%表示任意多个字符
示例:
select * from reader where name like '王_'
select * from reader where name not like '张%'
语法五:is null
判断某一值是否为空
示例:
select * from reader where sex is null
4、order by子句
语法:
ASC表示升序,DESC表示降序,默认升序
order by <列名> [asc/desc]
示例:
select * from reader order by birthdate ASC
5、聚集函数
count(*): 计算组元个数
count(<列名>): 统计列值个数
sum(<列名>): 计算列值总和(只限数值型)
avg(<列名>): 计算列值平均值(只限数值型)
max(<列名>): 求列值最大值
min(<列名>): 求列值最小值
注:聚集函数不能写在where子句中
6、分组查询
group by <列名> having <组提条件>
示例:
select reader_ID, count(book_ID) from borrow
group by reader_ID having count(book_ID)>2
7、嵌套子查询
(1)比较运算中的子查询
select name from book where price=(
select max(price) from book)
(2)带有in的子查询
select * from book where publish in(
select publish from book where name='数据库基础')
(3)exists子查询 判断结果是否存在,存在返回true,否则为false
select name from reader where exists(
select * from borrow where borrow.reader_ID=reader.reader_ID)
(4)some查询:表示子查询结果集合中的某一个元素
select * from book where price>some(
select price from book)
(5)all查询:表示子查询结果集合中的所有元素
select * from book where price>=all(
select price from book)
8、多表连接查询
(1)内连接
from 表1[inner] join 表2 on <连接条件>
示例:
select reader.reader_ID,name,sex,birthdate,borrow.book_ID,
borrow.reader_ID,borrowdate from reader join borrow
on reader.reader_ID=borrow.reader_ID
(2)左外连接
from 表1 left [outer] join 表2 on <连接条件>
示例:
select reader.reader_ID as 读者编号,name as 读者姓名,
borrow.book_ID as 图书编号 from reader left join borrow
on reader.reader_ID = borrow.reader_ID
(3)右外连接
from 表1 right [outer] join 表2 on <连接条件>
(4)全外连接
from 表1 full [outer] join 表2 on <连接条件>
(5)theta方式连接
from 表1,表2... where <连接条件>
示例:
select reader.*,borrow.*
from reader,borrow
where reader.reader_ID = borrow.reader_ID
9、复杂查询
(1)union:合并两个或多个查询结果
select <目标列名序列> from <数据源>
{where <条件>
group by <分组依据列>
having <组提取条件>
order by <排列依据>}
union
select <目标列名序列> from <数据源>
{where <条件>
group by <分组依据列>
having <组提取条件>
order by <排列依据>}
示例:
select * from book
where publish='清华大学出版社'
union
select * from book
where price<25
order by name
(2)intersect:可以得到两个或多个查询结果的交集
select * from book
where publish='清华大学出版社'
intersect
select * from book
where price<25
(3)except(minus):在两个sql语句上先找出第一个sql语句所产生的结果,然后看这些结果有没有在第二个sql语句的结果中,如果有就去除。还有就是如果第二个sql语句中产生的结果没有在第一个sql语句产生的结果内,也去除
select * from book
where publish='清华大学出版社'
except
select *from book
where price<25
(4)派生关系
select publish,AVG_price
from(select publish,avg(price)
from book
group by publish)
as result(publish,avg(price)
四、插入数据
语法:
insert into 表名(列名列表) values(值列表)
示例:
insert into reader(reader_ID,name,sex,birthdate)
values('021B310001','张冬','男','1976-11-26')
五、修改数据
语法:
update <表名> set <列名+表达式>... where <更新条件>
示例:
update book set price=price*0.8
六、删除数据
语法:
delete from <表名> where <删除条件>
示例:
delete from book
|