JAVA入门到精通-第59讲-sqlServer基本查询

sqlServer基本查询
dept/emp表:
MGR:直接上级的编号
HIREDATE:入职日期
COMM:奖金
DEPTNO:部门编号

创建dept表

创建emp表
 deptno 是外键,foreign key refercnce dept (deptno)
 reference 引用;

针对外键:
 dept:
emp:

 select查询:
*能不用则不用;对资源是种浪费;
  整个数据带过来是很大的;

distinct 区别;
distinct只会抛弃完全一样的;

select distinct  deptno,ename 
     from emp
 
消除结果完全相同的那一行;

查询计算:
 列的别名;
 如何处理空?
 有一个函数,解决null问题---isnull;
 comm为空,返回0;否则,返回本身的值;
 
 isnull提供了一个函数进行判断是否为null;


时间查询计算:
执行查询的时候,数据库会试图转换datetime格式;

--between  and 
between 效率会高一点点;包含取两边都取;

-- like模糊查询
%任意的;_ 表示单个字符;

==================================

数据库例解主键、外键、多功能查询,见下例:
--建库
create database test


--创建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(10,2),--薪水
comm numeric(10,2),--奖金
deptno int foreign key references dept(deptno)--部门编号(做成外键)
)


--针对外键,请注意:
--1、外键只能指向主键
--2、外键和主键的数据类型要一致


--向dept表中添加数据
insert into dept values (10,'accounting','new york')
insert into dept values (20,'research','dallas')
insert into dept values (30,'sales','chicago')
insert into dept values (40,'operations','boston')


--向emp表中添加数据
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7369,'smith','clerk',7902,'1980-12-17',800.00,20)
insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300.00,30)
insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30)
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7566,'jones','manager',7839,'1981-4-2',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.00,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',950.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)


--查看dept表内容
select * from dept

--查看emp表内容
select * from emp

--查询所有列
--语法:select * from 表名 where 条件
select * from emp

--查询指定列(sql sever不区分大小写,oracle区分大小写)
--语法:select 字段1,字段2 from 表名 where 条件

--查询smith的薪水,工作,所在部门
select sal,job,deptno from emp where ename='smith'

--取消重复行(distinct只能消除完全一样的行,保留一行)
--语法:select distinct 字段 from 表名 where 条件

--统计共有多少个部门编号
select distinct deptno from emp

--使用算数表达式
--显示每个雇员的年工资+奖金
select ename"姓名",sal*13+isnull(comm,0)*13"年收入" from emp

--使用where子句
--如何显示工资高于3000的员工
select ename"员工姓名",sal"工资高于3000" from emp where sal>3000

--如何查找1982-1-1后入职的员工
select ename"员工姓名",hiredate"1982-1-1后入职日期" from emp where hiredate>'1982-1-1'

--如何显示工资在2000到2500的员工情况
select * from emp where sal>=2000 and sal<=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%'

--在where条件中使用in
--如何显示empno为123,345,800...的雇员情况
select * from emp where empno in(123,345,800)

--使用is null的操作符
--如何显示没有上级的雇员的情况
select * from emp where mgr is null

--使用逻辑操作符号
--查询工资高于500或是岗位为manager的雇员,同时还要满足他们的姓名首写字母为大写的J
select * from emp where (sal>500 or job='manager') and ename like 'J%'

--使用order by字句(asc默认是升序排列,desc为降序排列)
--如何按照工资的从低到高的顺序显示雇员的信息
select sal from emp order by sal asc
--按照部门号升序而雇员的工资降序排列
--order by可以根据不同的字段排序
select deptno,sal from emp order by deptno,sal desc

--使用列的别名排序(别名需要使用""号圈中)
select ename,sal*12"年薪" from emp order by "年薪"
 
1
数据库例解主键、外键、多功能查询,见下例:
2
--建库
3
create database test
4
5
6
--创建dept表
7
create table dept--部门表
8
(deptno int primary key,--部门编号
9
dname nvarchar(30),--部门名称
10
loc nvarchar(30)--所在地
11
)
12
13
14
--建表emp
15
create table emp--表名
16
(empno int primary key,--编号
17
ename nvarchar(30),--名字
18
job nvarchar(30),--职位
19
mgr int,--上级编号
20
hiredate datetime,--入职日期
21
sal numeric(10,2),--薪水
22
comm numeric(10,2),--奖金
23
deptno int foreign key references dept(deptno)--部门编号(做成外键)
24
)
25
26
27
--针对外键,请注意:
28
--1、外键只能指向主键
29
--2、外键和主键的数据类型要一致
30
31
32
--向dept表中添加数据
33
insert into dept values (10,'accounting','new york')
34
insert into dept values (20,'research','dallas')
35
insert into dept values (30,'sales','chicago')
36
insert into dept values (40,'operations','boston')
37
38
39
--向emp表中添加数据
40
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7369,'smith','clerk',7902,'1980-12-17',800.00,20)
41
insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300.00,30)
42
insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30)
43
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7566,'jones','manager',7839,'1981-4-2',2975.00,20)
44
insert into emp values(7654,'martin','salesman',7698,'1981-9-28',1250.00,1400.00,30)
45
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7698,'blake','manager',7839,'1981-5-1',2850.00,30)
46
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7782,'clark','manager',7839,'1981-6-9',2450.00,10)
47
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7788,'scott','analyst',7566,'1987-4-19',3000.00,20)
48
insert into emp (empno,ename,job,hiredate,sal,deptno) values (7839,'king','president','1981-11-17',5000.00,10)
49
insert into emp values (7844,'turner','salesman',7698,'1981-9-8',1500.00,0.00,30)
50
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7876,'adams','clerk',7788,'1987-5-23',1100.00,20)
51
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7900,'james','clerk',7698,'1981-12-3',950.00,30)
52
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7902,'ford','analyst',7566,'1981-12-3',3000.00,20)
53
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7934,'miller','clerk',7782,'1982-1-23',1300.00,10)
54
55
56
--查看dept表内容
57
select * from dept
58
59
--查看emp表内容
60
select * from emp
61
62
--查询所有列
63
--语法:select * from 表名 where 条件
64
select * from emp
65
66
--查询指定列(sql sever不区分大小写,oracle区分大小写)
67
--语法:select 字段1,字段2 from 表名 where 条件
68
69
--查询smith的薪水,工作,所在部门
70
select sal,job,deptno from emp where ename='smith'
71
72
--取消重复行(distinct只能消除完全一样的行,保留一行)
73
--语法:select distinct 字段 from 表名 where 条件
74
75
--统计共有多少个部门编号
76
select distinct deptno from emp
77
78
--使用算数表达式
79
--显示每个雇员的年工资+奖金
80
select ename"姓名",sal*13+isnull(comm,0)*13"年收入" from emp
81
82
--使用where子句
83
--如何显示工资高于3000的员工
84
select ename"员工姓名",sal"工资高于3000" from emp where sal>3000
85
86
--如何查找1982-1-1后入职的员工
87
select ename"员工姓名",hiredate"1982-1-1后入职日期" from emp where hiredate>'1982-1-1'
88
89
--如何显示工资在2000到2500的员工情况
90
select * from emp where sal>=2000 and sal<=2500
91
select * from emp where sal between 2000 and 2500
92
93
--如何使用like操作符(模糊查询)
94
--%:表示0到多个字符 _:表示单个字符
95
--如何显示首字符为S的员工姓名和工资
96
select ename,sal from emp where ename like 's%'
97
98
--如何显示第三个字符为o的所有员工的姓名和工资
99
select ename,sal from emp where ename like '__O%'
100
101
--在where条件中使用in
102
--如何显示empno为123,345,800...的雇员情况
103
select * from emp where empno in(123,345,800)
104
105
--使用is null的操作符
106
--如何显示没有上级的雇员的情况
107
select * from emp where mgr is null
108
109
--使用逻辑操作符号
110
--查询工资高于500或是岗位为manager的雇员,同时还要满足他们的姓名首写字母为大写的J
111
select * from emp where (sal>500 or job='manager') and ename like 'J%'
112
113
--使用order by字句(asc默认是升序排列,desc为降序排列)
114
--如何按照工资的从低到高的顺序显示雇员的信息
115
select sal from emp order by sal asc
116
--按照部门号升序而雇员的工资降序排列
117
--order by可以根据不同的字段排序
118
select deptno,sal from emp order by deptno,sal desc
119
120
--使用列的别名排序(别名需要使用""号圈中)
121
select ename,sal*12"年薪" from emp order by "年薪"
122





 



















猜你喜欢

转载自www.cnblogs.com/xuxaut-558/p/10035719.html