sql语言复习2

一、查询

select 字段列表 from 表名列表 [where 条件表达式][group by 字段列表[having 条件表达式]] [order by 字段列表[asc|desc]]

含义:在from后面给出的表中,按照where给定的条件,select出规定的字段列表。如何有group by 字段列表,则结果集按照group by 后面的字段列表排序,having 后面的条件表达式是分组时结果输出条件。order by 表示结果集按照其后面的字段列表进行升序或者降序排列。各个字段列表与表名列表之间用,逗号隔开。

单表查询:

select * from mag_emp

select EmpName,sexinfo,empage from mag_emp

select depname 部门名称, deptel as 联系电话 from mag_dept

select distinct emprole from mag_emp 去除重复

where字句的使用:

select empname, emprole from mag_emp where emprole='编辑'

select empname,emprole,empage,sexinfo from mag_emp where sexinfo ='男' and empage >=30

select empname,emprole,empage form mag_emp where empage ( not )between 25 and 40 (empage >=25 and empage <=40 )

select magid,designername from mag_info where designername in ('小樱','清泉','小米') equal (dn='*' or dn='*' or dn='*')

模糊查询:

% 代表匹配0个或多个字符 _ 代表一个字符 [ ] 匹配某区间的数据

select empage from mag_emp where empname like '张%'

select empname , permister from emp_mag where permister like '%核稿%'

select empname,depmanager ,deptel from mag_dept where deptel like '______2__'

select magid,designername from mag_info where magname='北京信息周报' and magid like '____20040[1-5]'

order by 子句的使用:(默认是升序 asc)

select * from mag_emp order by empage desc

select* from mag_emp order by empname

select * from mag_emp order by depid, empage desc (首先按第一排序字段排序,若第一字段相同,则按照第二字段排序)

多表查询:

select depname from mag_dept, mag_emp where mag_dept.depid=mag_emp.depid and empname='张斌'

select magname,designername,empage,emprole from mag_info i , mag_emp, mag_doc d where i.magid = d.magid and designername=empname and doctitle ='xxx'

以上通过采用别名的方法,将表分别命名为 i 和 d。然后引用命名后的变量进行条件的筛选。

查询聚合数据:

avg() sum() max() min() count() count(*)

select avg(empage),count(empid) from mag_emp

select avg(empage) '平均年龄' , count(empid) as '员工人数' from mag_emp

select sexinfo, avg(empage) '平均年龄' , count(empid) from mag_emp group by sexinfo

select depname,avg(empage) '平均年龄' from mag_emp, mag_dept where mag_dept.depid=mag_mag.depid and mag_emp.depid =2 group by depname,mag_emp.depid

嵌套查询:

嵌套查询可以解决多表查询问题,但要求主查询输出的字段必须来自于同一个表,可以嵌套多层

select empname,empage from mag_emp where empage>(select avg(empage) from mag_emp)

select depname from mag_dept where depid=(select depid from mag_emp where dmpname='xxx')

保存查询结果:

只需要在select与from中间加上into + 表名即可。

select Doctitle into #temp_title from mag_doc where wordssum > (select avg(wordssum) from mag_doc)

select * from #temp_title

二、数据更新

输入数据:

insert into 表名[字段] values ()

输入单个元组:

insert into mag_info values ('xxx','xxx','xxx','xxx','xxx','xxx')

insert into mag_emp(empname,sexinfo,empage,depid) values('chen','woman',23,1)

输入多个元组:

注意:下面的语句省略了into,因为我们这里输入的是多个元组,所以格式有所变化

insert dept_bak(depname,depmanger) select depname,depmanger from mag_dept

更改数据:

update 表名 set 列名=值[,列名=值,] [where 条件表达式]

update dept_bak set deptel='ssssss'

update dept_bak set deptel='11111' ,depmanager='xxxx' where depid=2

update stu set age = age + 4

删除数据:

delete from dept_bak

三、视图

视图是一种逻辑结构,是表示数据的一种形式。

用户可以通过视图对数据进行的操作将直接作用于数据表,但删除一个视图,则不会影响数据表中的任何数据

create view 视图名[(列名组)] [with encryption] as 子查询 [with check option]

其中,子查询可以说select语句,with encryption 表示对视图进行加密。with check option 表示对视图进行数据更新操作时,要保证其条件满足子查询。

还有就是,只能在当前数据库中使用视图,如果视图被删除,则当前视图不可用,需要重新创建新的视图或者基表。

create view 部门1 as select * form mag_dept where depid = 1

create view 中文排版人员信息 with encryption as select empid,empname,sexinfo,empage,emprole from mag_emp e, mag_dep d where e.depid=d.depid and depname='xxx' with check option

修改视图:

将create 变成alter即可。

alter view 部门1 (部门编号,部门名称,部门负责人,电话) as select * from mag_dept where depid = 1

使用视图:

将其当做表即可。

select * from 部门1

update 部门1 set 部门名称='中文编辑部' where 部门编号=1

删除视图:

drop view 视图名

drop view 部门1

其优点: 简化用户操作,不同视角看待数据,对数据提供安全保护

四、规则与默认值

规则与默认值同样可以实现数据完整性,但在定义与使用上却与约束不相同。

规则:

create rule 规则名 as 规则表达式

表达式中参数前需要加 @ 符号。

create rule age_rule as @age>=1 and @age <=100

create rule sex_rule as @sex in ('woman','man')

使用规则,前需要先绑定规则。

sp_bindrule 规则名,'表名.列名' 其中,sp_bindrule是一次存储过程。

sp_bindrule age_rule , 'mag_emp.empage'

insert into mag_emp(empname,sexinfo,empage,edpid) values('xxx','woman',321,1)

以上语句会报错,因为与我们定义的规则不符合。

查看规则: sp_helptext 规则名

sp_helptext sex_rule

解除规则:sp_unbindrule

sp_unbindrule 'mag_emp.empage', age_rule

删除规则:drop rule 规则名组

drop rule age_rule,sex_rule

创建与管理默认值:

create default 默认名 as 表达式

create default sex_default as 'woman'

使用默认值:

sp_binddefault sex_default ,'mag_emp.sexinfo'

查看默认值:

sp_helpconstraint mag_emp

解除默认值:

sp_unbinddefault '表名.列名','默认值'

sp_unbinddefault 'mag_emp.sexinfo',sex_default

删除默认值:

drop default sex_default

两种实现数据完整性方法的比较:

1、对象等级不同 数据库对象vs数据表对象

2、定义方法不同 创建的语句不一样,这节所用的方法更灵活

3、使用方法不同 本节所用方法,一次定义,多次使用。

原文地址:https://www.cnblogs.com/zhuxuekui/p/4417457.html