复习数据库笔记

来源:互联网 发布:林州网络最近新闻 编辑:程序博客网 时间:2024/05/16 17:00

这两天重新学习了一下数据库,在此做笔记整理。

数据库分为三层: 

物理层,概念层,逻辑层


SQL语言包含四个部分
1.数据 定义 语言DDL:CREATE / DROP / ALTER
2.数据 操作 语言DML:INSERT / UPDATE / DELETE
3.数据 查询 语言DQL:SELECT
4.数据 控制 语言DCL:GRANT / REVOKE

各种编码的区别:
unicode : 两个字节表示一个字符(可以是英文字母s,也可以是汉字)
 对汉字支持比较好
非unicode : 用一个字节表示一个字母,两个字节表示一个汉字
//big5 : 支持繁体
//iso-8859-1编码 : 支持欧文
//GB2312国标码 
//gbk : 支持更多的汉字 
utf-8
utf-16


可以存放汉字,unicode编码:
nchar
nvarchar 


 
drop table abc--创建表CREATE table clerk(cleId int primary key,       //这里声明主键 cleName nvarchar(50), age int)--插入insert into clerk values(1,'贾宝玉',18)insert into clerk values(2,'贾政',18)insert into clerk (cleId,cleName) values(3,'林黛玉')--查询select * from clerk--修改--把贾政的年龄修改成38update clerk set age=38 where cleName='贾政'--把2号人物,名字改为薛蟠,age改为40update clerk set cleName='薛蟠' , age=40 where cleId=2--主键能修改吗? 2->4 //必须改为不存在的一个值,即主键值不能重复update clerk set cleId=4 where cleName='薛蟠'update clerk set cleName='薛宝钗' where age is nullinsert into clerk values(5,'贾母',70)insert into clerk values(6,'焦大',75)--删除年龄大于70且小于75delete from clerk where age>=70  and age<=75--或者age 是nulldelete from clerk where (age>=70  and age<=75) or age is null--------------------------------下面是针对一个员工、部门表的操作--创建一个新的数据库create database spd1--创建dept表create table dept(deptno int primary key, dname nvarchar(30), loc   nvarchar(30))--创建emp表create table emp(empno int primary key, ename nvarchar(30), job   nvarchar(30), mgr   int, hiredate datetime, sal   numeric(8,2), comm  numeric(8,2), deptno intforeign key references dept(deptno)--因为deptno我们根据需要要做成外键)--针对外键,请注意--①外键只能指向主键--②外键和主键的数据类型要一致select * from deptselect * from emp --查询所有列select * frome emp where -- * 能不用就不用 --查询指定列select 字段1,字段2 frome 表名 where 条件--???查询Smith的薪水,工作,所在部门select sal,job,deptno from emp where ename='smith' --sql server 不区分大小写--如何取消重复行(distinct只能消除完全一样的行,保留一行)select distinct 字段 from 表名 where 条件--???统计多少个部门select deptno from empselect distinct deptno from emp--使用算数表达式使用列的别名--???显示每个雇员的年工资+奖金  (年工资就是别名)select ename,sal*13+comm*13 '年工资' from emp--如何处理 NULL 的问题 isnull(字段,0)  isnull(comm,0)*13--如何使用where--???工资高于3000select * from emp where sal>3000--???如何查找1982.1.1后的员工select * from emp where hiredate>'1982-1-1'--???如何查找工资在2000到2500的员工情况 (闭区间)select * from emp where sal between 2000 and 2500--如何使用 like 操作符 (模糊查询) %表示0到多个字符 _ 表示单个字符--???显示首字符为 s 的员工姓名,工资select ename ,sal from emp where ename like 's%'--???显示第三个字符为 o 的员工select ename,sal from emp where ename like '__o%'--批量查询 inselect * from emp where empno in (7369,7521,7499)--???显示没有上级的雇员的信息select * from emp where mgr is null--使用逻辑操作符号--???查询工资高于500或者岗位为MANAGER的雇员,同时还要姓名首字母为Jselect * from emp where (sal>500 or job='manager') and ename like 'j%'--使用order by 按顺序排名  默认是升序排列 asc  / 降序 desc--???按照工资高低排名select * from emp order by sal desc--???按照入职先后顺序排列select * from emp order by hiredate ascselect * from emp order by ename asc--???按照部门号升序而员工工资降序select * from emp order by deptno , sal desc --逗号后面是候选排序规则--???使用别名排序。 统计每个人的年薪,并按照从低到高的顺序排列select ename , (sal +ISNULL(comm,0))*13 年薪 from emp order by 年薪 ---------分页查询----------------------------------------等学习了子查询再看-------------------------------------------------------------表的复杂查询------------------------------------------最低工资select MIN(sal) from empselect ename , sal from emp where  sal = (select MIN(sal) from emp)--平均工资和工资总合--把高于平均工资的员工名字和他的工资显示,并显示平均工资select AVG (sal) 平均工资 ,SUM(sal) 总工资 from empselect ename , sal  from emp where sal > (select AVG(sal) from emp)--统计共有多少员工select COUNT(*) from emp--GROUP BY 和 having--group by 用于对查询的结果分组统计--having 往往和group by 结合使用,可以对分组查询到的结果进行筛选--???显示每个部门的平均工资和最高工资?并显示部门名称(多表查询)select AVG(sal) 平均工资,deptno,MAX(sal) 最高工资 from emp group by deptno--???显示每个部门每种岗位的平均工资和最高工资select avg(sal),min(sal),deptno,job from emp group by deptno ,job order by deptno--???显示平均工资低于2000的部门号和它的平均工资select AVG(sal) 平均,deptno from emp group by deptno having AVG(sal)<2000--对数据分组的总结--1. 分组函数只能出现在选择列表、having 、 order by子句中--2. 在select语句中 顺序为 group by 、having 、order by ,例如select AVG(sal) 平均,deptno from emp group by deptno having AVG(sal)>2000 order by avg(sal) desc--3. 在选择列中如果有列、表达式 、分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则会出错---------表的多表查询----------------------------------------


0 0
原创粉丝点击