数据库基础笔记

group by用于对查询结果分组统计

having子句用于限制分组显示结果

自增长:identity1,1

创建聚集索引:

create clustered index xxx(索引名称) on xxx表名(xxx列名)

创建非聚集索引:

create nonclustered index xxx(索引名称)on xxx表名(xxx列名)

删除索引

drop index 表名.索引名

Update text1(表名) set sal=sal*1.1 (后面可以加where)

外部候选人jane schaffer 的测试成绩将加2

update xxx(表名)set sitestscore=sitestscort +2 where ccandidatecode=jane schaffer

Age float(2)将显示8位数,包括小数(不够8位全显示,超过8位只显示前8位)。

定义2位小数的numeric(10,2) 

删除语句

主键可以更改

`子查询多表查询分页查询等等。。

insert into 表名 字段列表

外键:

customerId nvarchar(50) foreign key references customer(customerId)

修改表中列的属性:

alter table xxx(表名)

add constranint xxx (列名) +条件

create table dept( 

deptno int primary key,

dname nvarchar(30),

loc nvarchar(30)

)

select * from emp

select * from dept

create table emp2(

empno int primary key,

ename nvarchar(30), 

job nvarchar(30),

mgr int,

hiredate datetime, 

sal numeric(10,2),

comm numeric (10,2),

deptno int foreign key references dept(deptno)

)

 

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(,'','',,'',,)

insert into emp values(,'','',,'',,,)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7369,'smith','clerk',7902,'1980-12-17',1600.00,20)

insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300,30)

insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500,30)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7566,'jones','manager',7839,'1981-5-1',2975.00,20)

insert into emp values(7654,'martin','salesman',7698,'1981-9-28',1250.00,1400.00,30)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7698,'blake','manager',7839,'1981-5-1',2850.00,30)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7782,'clark','manager',7839,'1981-6-9',2450.00,10)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7788,'scott','analyst',7566,'1987-4-19',3000.00,20)

insert into emp(empno,ename,job,hiredate,sal,deptno) values(7839,'king','president','1981-11-17',5000.00,10)

insert into emp values(7844,'turner','salesman',7698,'1981-9-8',1500.00,0,30)

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7876,'adams','clerk',7788,'1987-5-23',1100.00,20)

 

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7900,'james','clerk',7698,'1981-12-3',930.00,30)

 

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7902,'ford','analyst',7566,'1981-12-3',3000.00,20)

 

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7934,'miller','clerk',7782,'1982-1-23',1300.00,10)

insert into emp values(9999,'shunping','clerk',7782,'1988-5-5',2456.34,55.66,10)

 

insert into dept values(10,'accounting','new york')

insert into dept values(20,'resercher','dallas')

insert into dept values(30,'sales','chicago')

insert into dept values(40,'operations','boston')

 

 

 

查询 smith的薪水工作和部门

select sal,job,deptno from emp where ename=xx

取消重复行的显示:

select distinct ename,xx,xx from emp where XXXX

显示人名和年工资

select ename,sal*13 '年工资' from emp order by sal

select ename '',(sal+comm)*13 '年工资' from emp order by sal

null换成0

select ename '',(sal+isnull(comm,0))*13 '年工资' from emp order by sal

入职时间在xxx以后的

select * from emp where hiredate>'1982-1-1'

工资在20002500之间的人

 

select * from emp where sal between 2000 and 2500

首字母是s的人

select ename from emp where ename like 's%'

第三个字母是m的人

select ename from emp where ename like '__m%'

显示empno12345311、、、的雇员的情况

select * from emp where empno in(10,20)

工资大于500或工作是manager,同时他们的姓名首字母必须是j的员工信息

select * from emp where (sal>500 or job='manager') and ename like 'j%'

升序,降序:

select * from emp order by hiredate desc, ename desc

显示薪水最低员工的姓名和薪水

select ename,sal from emp where sal=(select min(sal) from emp)

显示平均工资和总工资

select avg(sal)平均工资,sum(sal)总工资 from emp

把高于平均工资的员工的名字和他的工资显示出来

select ename,sal from emp where sal>(select avg(sal)from emp)

统计共有多少员工

select count (*) from emp

select count(xxx)from emp

把高于平均工资的员工的名字和他的工资显示出来并显示平均工资

select ename,sal,(select avg(sal)from emp)平均工资 from emp where sal>(select avg(sal) from emp)

显示每个部门的平均工资

select avg(sal),deptno from emp group by deptno

如何显示每个部门的平均工资和最高工资

select max(sal),avg(sal),deptno from emp group by deptno

显示每个部门每种岗位的平均工资和最高工资

select max(sal),avg(sal),deptno from emp group by deptnojob 

显示平均工资低于2000的部门号和他的平均工资

select avg(sal),deptno from emp group by deptno having avg(sal)<2000

 

复制信息:

create table test(

testId int primary key identity(1,1),

testName varchar(30),

testPass varchar(30),

)

insert into test(testName,testPass) values ('shunping','123321')

insert into test(testName,testPass) select testName,testPass from test

找出即买了a产品,又买了b产品,还买了c产品的客户

select custom where

多表查询高于部门平均工资的员工的信息

select emp.ename,emp.sal,tem.myavg,emp.deptno from emp,(不能用and

(select avg(sal) myavg,deptno from emp group by deptno)tem

where emp.sal>tem.myavg and emp.deptno=tem.deptno

分页查询

显示第5到第10个入职的雇员:先显示前4个入职的

select top 4 * from emp order by hiredate

然后显示不在这4个里的前6

select top 6 * from emp where empno not in 

(select top 4 empno from emp order by hiredate ) order by hiredate

注意:::括号里 必须是empno 而不能是*

显示第五到第九人的信息(薪水高低

select top 5* from emp where empno not in (

select top 4 empno from emp order by sal desc

) order by sal desc

 

删除一张表中的重复记录

select distinct * into #emp from emp

delete from emp

insert into emp select * from # emo

drop table #emp

把第一张表非重复记录和第二张表的非重复记录显示出来

select distinct * from emp union all select*from #emp order by empno

把两张表的非重复记录显示出来:

select distinct * from emp union  select*from #emp order by empno

左外连接右外连接

select w.ename,b.ename  from emp w,emp b where w.mgr=b.empno(内连接)

左外连:显示没有上级的人,和有上级的人的名字和上级的名字(左边表的记录全部显示,如果没有匹配用null)

select w.ename,b.ename from emp w left join emp b on w.mgr=b.empno

右外连:

select w.ename,b.ename from emp w left join emp b on w.mgr=b.empno

列出title表中标题id和标题名,条件是价格大于出版商id0736所出版的所有书的价格

select id,tltle from title where price >all(select price from title where id=0736)

列出titiles表中标题id和标题名,条件是大于出版商id0736所出版书的最低价格

select id,title from title where price>any(select price from tltle where id=0736)

列出title表中标题id和标题名,该出版商所在城市包含在作者表中的城市

select id,title form title where city=any(select city from authors)

存入新表

select * into b from a where id=xxx

 

唯一的:

testname varchar(30)  unique 可以不给值,空也算unique

复合主键:

由多个列共同构成一个主键,不能为空

都写完后 primary keytestIdtestname

check

规范输入值:

sal int check(sal>1000 and sal<2000)

定义时间:

mesDate datetime default getdate()不给时间则按默认时间

商品表:

create table goods(

goodsId nvarchar(50) primary key,

goodsName nvarchar(80) not null,

unitprice numeric(10,2) check (unitprice>0),

category nvarchar(3)check(category in('食物','日用品')),

provider nvarchar(50)

)

select *from goods

客户表

create table customer(

customerId nvarchar(50) primary key,

customerName nvarchar(30) not null,

address nvarchar(100),

email nvarchar(100) unique,

sex nchar(1) check(sex in('',''))default '',

cardId nvarchar(18) not null

)

服务表:

create table purchase(

customerId nvarchar(50) foreign key references customer(customerId),

goodsId nvarchar(50) foreign key references goods(goodsId),

nums int check(nums>0 and nums<30)

)

修改表:

 

 

Sql语言包含4个部分:数据定义语言:CREATEDROPALTER

数据操作语言:INSERTUPDATEDELETE

数据查询语言:SELECT

数据控制语言:GRANTREVOKECOMMITROLLBACK

 

表名能以

字母,_开头,不能以数字开头

长度不能超过128字符

不能使用aql server的保留字 (除非用[]包起来)

不能用以下字符 A-Z,a-z,0-9,$,#,-

字符类型:

Big5编码:支持繁体

Iso-8859-1编码:支持欧文字母

国标码(gb2312):针对中国汉字

Gbk码:支持更多的汉字

 

Unicode 编码:用两个字节表示一个字符(可为英文可为汉字)(适合汉字)

unicode编码:一个字节表示一个字母,两个字节表示一个汉字

Char 定长 最大8000字符(非unicode编码)(查询时速度快)

Char10a,前3个字符放“小a”,后6个空格补全(非unicode编码)

Varchar10)变长 小韩,前4个字符放小韩,后面回收

Nchar 定长 最大4000字符(unicode编码)

Nvarchar 变长(unicode编码)

Ntext 可变长度unicode数据编码最大长度为230次方-1个字符

Text 可变长度非unicode数据编码最大长度为231次方-1个字符

Bit 范围 01

Int 范围-231次方到231次方-1

Bigint 范围-263次方到263次方-1

Float 存放小数,不推荐使用

Numeric 小数(如果存放小数最好用numeric

Unicode编码:用两个字节表示一个字符(可以是英文字母可以是汉字)

unicode 编码:用一个字节表示一个字母,两个字节表示汉字

Datetime 表示日期(用函数getdate()读取)

insert into stu values(getdate())

Timestamp 时间戳

Decimal31float型,3位有效,1位小数

Image 保存图像(很少用)一般保存图片在图片服务器(要求:带宽足够大)

Binary 可以存放视频,但往往将视频文件保存在文件服务器上,sql server中只保留文件路径,存取效率高。

Primary key 主键,用于表示唯一的记录(不能重复出现且不能为空)(主键也可以修改但不能改成已存在的主键)

 

外键:名字 类型 foreign key references 表单名(主键)

Batch 批量查询/批量增删改查。

插入部分字段 insert into (表单名)(字段名) values ()(外键只能指向主键,数据类型要一致)

Order by(按顺序排列)(默认升序排列)(一般放在最后)

Order by desc(按顺序排列)(降序排列)

分页查询:用到子查询(后面讲)

Select语句优化的原则

尽可能让能减少结构集的条件写在右面

Group by(用于对查询的结果分组统计)

Having(限制分组显示结果)(往往和group by 结合使用,可以对分组查询到的结果进行筛选)

多表查询是指基于两个和两个以上的表或是视图的查询,在实际应用中,查询单个表可能不能满足你的需求

自连接:把一个表看做两个表     

外连接:(左外链接,右外连接)

子查询:单行子查询:右面的select语句返回单行

多行子查询     

分页查询  :

请显示第五个到第10个入职的雇员(按照时间的先后顺序) 

左外链接:

左边的表的记录全部都要显示,如果没有匹配的记录,就用空来填写

Select w.ename,b.ename from emp w left join emp b on w.mgr=b.empno

约束:

用于确保数据库数据满足特定的商业规则,在oracle中,约束包括:not null

unique(与主键一样不能为空,但unique能放null),primary key(外键数据必须在主表中存在或者为null),foreign keycheck 5

行级定义和表级定义:

Default

 

 

Preparedstatement 可以提高执行效率(预编译)

可以防止注入漏洞,但是要求用问号赋值的方法才可以

Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

Connection ct=DriverManager.getConnection(jdbc:odbc:mytest,sa,123321);

Statement sm=ct.creatStatement();

sm.excuteUpdate(insert into article values(‘’,’’,’’));//添加删除修改

ResultSet rs=sm.excuteQuery(select *from dept)//结果集,resultset可以理解为表行的结果集

Rs指向结果集的第一行的上一行,可以循环取出

条件赋值语句

ps=ct.prepareStatement("select * from users0 where username=? and passwd=? " );

ps.setObject(1, username);

 ps.setObject(2, password)

SQL Server编程

常用以下术语:

批量,变量,打印消息,注解,控制流语句

使用变量存储一些值:declare @定义名 属性

declare @cahrge int    select @charge=max(列名)from 表名


你可能感兴趣的:(数据库基础笔记)