一:sql语句的分类
1.查询语句 select---这也是我工作最常用到的
2.操作类语句 insert,delete,update
3.事物类 commit,rollback
4.数据定义类 creat,drop .alter
二:sql server常用数据类型
1.字符串
char,varchar,text
2 .数值型
int,float,number
其中number(n):n表示保存整数的最大的位数。
number(n,m):n表示有效数字最大的位数,m表示小数的最大位数。
3.日期型
date,time
4.其他
bit,xml
三.各种查询归纳
1.关系运算符:=(等于),>,>=,<,<=,!=(不等于),<>(不等于)
eg:查询年龄大于20岁的学生
select * from Student where age>20;
2.逻辑运算符:and , or , not
eg:查询出大于20,小于25的学生人数
select * from Student where age>20 and age age<25;
3.模糊查询:like
eg:查询名字是s开头的学生
select * from Student where name like 's%'
查询最后一个字是g的学生
select * from Student where name like '%g';
查询倒数第二个字是N
select * from Student where name like '%N_';
4.查询去重复:distinct
eg:查询学生选修课选修科目(去掉重复科目)
select distinct subject from student;
5.查询结果分组:group by
eg:查询学生表中,学生专业,人数,最大年龄,最小年龄,根据科目分组,按照最大年龄降序排列
select subjece,count(*),max(age),min(age) from student group by subject order by max(age);
6.查询结果排序:order by
eg:查询emp表中名字不是以S开头,并且工资高于1000的所有员工,以职位分组,求出每个职位的名称、人数、平均工资、最高工资,最后根据人数进行升序排列,如果人数相同根据平均工资降序排列
select job, count(*),avg(sal),max(sal) from emp where ename not like 'S%' and sal >1000
group by job order by count(*),avg(sal) desc;
7.关联查询
a.内连接
查询年龄在20~30之间的学生的姓名、专业、年龄、以及学院编号、名称
select a.name,a.subject,a.age,e.xnum,e.xname from a.student, e.xue where a.xname=e.name and age between 20 and 30;
b.非等值连接
student表和score表之间的关联关系:
student中元的成绩在score最低成绩和最高成绩之间
between s.losco and s.hisco
eg:查询学生表中年级,最高成绩和最低成绩,学生学号,以及成绩表的年级,姓名,学号,成绩,入学时间,根据年级升序排列,如果年级一致就根据学号排序
select t.* ,s.grade ,s.sco,s.num ,s.date from t.student,s.score where t.score between s.losco and s.hisco order by s.grade ,t.num desc;
c.自连接:一张表中有两列有关联,当做两张表关联查询
eg:查询emp表中员工的编号、姓名以及上级领导的编号、姓名
select e.empno, e.ename, m.empno,m.ename from emp e,emp m --e员工表,m领导表
where e.mgr= m.empno
四.常用几种函数
1.count():返回的是当前表中数据总条数;列名,返回的是本列中,列值不为null数据的条数
eg:查询学生表中总条数
select count(*) from student;
2.sum():求和
eg:求所有学生年龄之和
select sum(age) from student;
3.avg():求平均值
eg:求学生平均年龄
select avg(age) from student;
4.max():最大值
eg:查询学生中年纪最大的
select max(age) from student;
5.min():最小值
eg:找出学生中最小年龄
select min(age) from student;
五.外连接操作
1.左外连接:以左表为主,查询左表中所有的数据,以及与之关联的右表中的数据
eg:查询emp表中所有员工的编号、姓名、工资以及所属的部门的编号、名称
select e.empno,e.ename,e.sal,d.deptno,d.dname from emp e left join dept d on e.deptno=d.deptno
eg:查询dept表中所有部门的编号、名称、地址以及该部门下员工的编号、姓名、职位
select d.*,e.empno,e.ename,e.job from dept d left join emp e on e.deptno=d.deptno
eg:查询emp表中所有员工的编号、姓名、职位、工资、入职时间,以及工资的等级、该等级的最低工资
select e.empno,e.ename,e.job,e.sal,e.hiredate,s.grade,s.losal from emp e left join salgrade s on e.sal between s.losal and s.hisal
2.右外连接:右表为主,查询右表中所有的数据,以及与之关联的左表中的数据
格式:
select 别名1.*/列名,别名2.*/列名 from 左表 别名1 right (ought) join 右表 别名2 on 关联条件
eg:查询emp表中所有员工的编号、姓名以及所属部门的编号、地址
select e.empno,e.ename,d.* from dept d right join emp e on e.deptno= d.deptno
eg:查询dept表中所有部门的所有信息,以及该部门下员工的姓名、职位、入职时间、工资,根据员工的工资进行降序排列
select d.*,e.ename,e.job, e.hiredate,e.sal from emp e right outer join dept d on e.deptno= d.deptno order by e.sal desc
eg:查询emp表中所有员工的编号、姓名、职位、工资,以及工资的等级、最低工资、最高工资,最后根据工资的等级进行升序排列,如果等级一致,根据员工的编号进行降序排列
select e.empno,e.ename,e.job,e.sal,s.* from salgrade s right join emp e on e.sal between s.losal and s.hisal order by s.grade,e.empno desc