白白酱的SQL学习笔记

一: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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

    

    

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值