赞
踩
本文主要记录一些数据库常规的语法
提示:以下是本篇文章正文内容,下面案例可供参考
语法:
create database 数据库名 //后面可接多个数据库名
on(<文件格式>...) //可不写
log on(<文件格式>...) //可不写
示例:创建一个名为Sales的数据库
create database Sales
on //后面接数据库的参数信息
(name = Sales_dat, //数据库逻辑文件名
filename =' ' , //数据库存放路径
size = 10, //数据库初始化大小
maxsize = 50, //数据库最大大小,默认为mb,也可加上kb或者%
filegrowth = 5) //数据库文件的增加量
log on //后面接数据库日志文件的信息
(name = 'Sales_log',
filename = '',
size = 5mb,
maxsize = 25mb,
filegrowth = 5mb)
语法:
drop database 数据库名 //后面可接多个数据库名
示例:删除一个名为Sales的数据库
drop database Sales
语法:
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), //check约束,price大于0
classify varchar(20)
)
语法:
drop table <表名> //后面可接多个表名
示例:删除book表
drop table book
表中列的修改
语法:
alter table <表名> //后面可接多条下面语句
alter column <列名> <新数据类型> //修改列定义
add <列名> <数据类型> [约束] //添加新列
drop column <列名> //删除列
示例:
//添加“职业”列到Reader表中,列的定义为profession char(20)
alter table Reader
add profession char(20)
//将profession列的数据类型改为char(30)
alter table Reader
alter column profession char(30)
//删除profession列
alter table Reader
drop column profession
表中约束的修改
语法:
alter table <表名>
//check表示对原有数据进行检查,如果存在数据不满足约束,则不能添加约束
//oncheck不进行检查
with check(oncheck)
add constraint <约束> //新增约束
drop constraint <约束> //删除约束
示例:
//为student表中的年龄添加大于15岁的约束,并对原数据进行检查
alter table student
with check
add constraint check_year check(check_year>15)
//删除约束df_deopt
alter table student
drop constraint df_deopt
select <目标列名序列> from <数据源>
{where <条件>
group by <分组依据列>
having <组提取条件>
order by <排列依据>}
语法一:select接列名
select <列名> from <表名> //可多个列名
示例:
//查询book表中的name,author,price列
select name,author,price from book
//查询book表中所以列
select * from book
语法二:不显示重复结果
如果在查询结果中重复数据不想显示出来,可以用distinct关键字
重复显示可以用all关键字
示例:
//查询reader表中sex字段(去重)
select distinct sex from reader
//查询reader表中sex字段(重复)
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
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 <上限值> //查找不在该范围的数据
示例:
//查询价格在25到50元之间的图书
select * from book where price between 25 and 50
//查询价格不在20到30元之间的图书
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
语法:
ASC表示升序,DESC表示降序,默认升序
order by <列名> [asc/desc] //后面可接多个
示例:
//查询读者的额信息按出生日期的升序显示
select * from reader order by birthdate ASC
count(*): 计算组元个数
count(<列名>): 统计列值个数
sum(<列名>): 计算列值总和(只限数值型)
avg(<列名>): 计算列值平均值(只限数值型)
max(<列名>): 求列值最大值
min(<列名>): 求列值最小值
注:聚集函数不能写在where子句中
//group by分组后用having进行筛选
group by <列名> having <组提条件>
示例:
//查询所借图书的数目多于2本的读者编号,并显示所借图书的数目
select reader_ID, count(book_ID) from borrow
group by reader_ID having count(book_ID)>2
(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)
(1)内连接
from 表1[inner] join 表2 on <连接条件>
示例:
//将reader和borrow两张表按照读者编号相等进行连接
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 <连接条件>
//在连接过程表1的元组r如果不能满足连接条件,则r保留在连接结果中
//在连接结果中,和r相对应的表2的列值用null代替
示例:
//将reader和borrow进行左外连接,显示读者编号,读者姓名,图书编号
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 <连接条件>
//在连接过程表2的元组r如果不能满足连接条件,则r保留在连接结果中
//在连接结果中,和r相对应的表1的列值用null代替
(4)全外连接
from 表1 full [outer] join 表2 on <连接条件>
//在连接过程表1或者表2的元组r如果不能满足连接条件,则r保留在连接结果中
//在连接结果中,和r相对应的表1的列值用null代替
(5)theta方式连接
from 表1,表2... where <连接条件>
示例:
//将reader和borrow两张表按照读者编号相等进行连接
select reader.*,borrow.*
from reader,borrow
where reader.reader_ID = borrow.reader_ID
(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 //若不希望去重,可以在union后加上关键字all
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)派生关系
//查询出版图书评价价格多于25元的出版社
select publish,AVG_price
from(select publish,avg(price)
from book
group by publish)
as result(publish,avg(price)
语法:
insert into 表名(列名列表) values(值列表)
示例:
//把数据('021B310001','张冬','男','1976-11-26')插入到reader表中
insert into reader(reader_ID,name,sex,birthdate)
values('021B310001','张冬','男','1976-11-26')
语法:
update <表名> set <列名+表达式>... where <更新条件>
示例:
//所以图书的价格打8折
update book set price=price*0.8
语法:
delete from <表名> where <删除条件>
示例:
//删除book表中的全部数据
delete from book
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。