zoukankan      html  css  js  c++  java
  • sql数据库学习笔记


    starting...
    1.数据库概念2.安装和卸载3.数据类型4.基本查询5.复杂查询6.约束、备份和恢复

    (1).表名和列的命名规则:必须以字母开头、长度不能超过128字符、不要使用sql server的保留字、只能使用如下字符A-Z,a-z,0-9,$,_等...

    注意:
        unicode编码:用两个字节表示一个字符(可以是英文字母,可以是汉字)-》对汉字支持比较好,非unicode编码:用一个字节表示一个字母,用两个字节表示一个汉字。

    表的基本查询:

    --创建数据库
    create database xushouwei
    --创建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)--因为deptno我们根据需要做成外键
    )
    --针对外键请注意:外键只能指向主键、外键和主键的数据类型要一致

    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,'clerk','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,'adahs','clerk',7788,'1987-5-23',1100.00,20)
    insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7900,'janes','clerk',7698,'1981-12-3',950.00,30)
    insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7902,'ford','clerk',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 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')

    select * from emp
    select * from dept

    查询所有列:select * from 表明 where 条件
    查询制定列:select 字段1,字段2 from 表明 where 条件
    如何取消重复行(distinct只能消除完全一样的行,保留一行   ):select distinct 字段 from 表名 where 条件

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

    --显示每个员工的年薪(年工资就是别名+奖金)
    select ename,sal*13+isnull (comm,0)*13年工资 from emp  

    --如何显示工资高于3000的员工
    select * from emp where sal>3000
    select ename from emp where sal>3000

    --如何查找1982.1.1后入职的员工
    select * 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

    --如何显示首字母为s的员工姓名和工资
    --%代表0-多个字符,_表示单个字符
    select ename,sal from emp where ename like 's%'

    --如何显示第三个字符为大写O的所有员工的姓名和工资
    select ename,sal from emp where ename like '__O%'

    --如何显示empno为123,345,800...的雇员情况(一般使用in关键字)
    select * from emp where empno=123 or empno=345 or empno=800
    select * from emp where empno in(123,345,800)

    --显示没有上级雇员的情况
    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 默认是升序排列)
    select * from emp order by sal asc

    --如何按照工资的从高到低的顺序显示雇员的信息
    select * from emp order by sal desc

    --如何按照雇员入职先后顺序排列
    select * from emp order by hiredate asc

    --如何按照部门号升序而雇员的工资降序排列
    select * from emp order by deptno asc , sal desc

    --统计每个人的年薪,并按照从低到高的顺序排序
    select ename,sal*13+isnull(comm,0)*13年薪 from emp  order by 年薪 asc
    select ename,sal*13+isnull(comm,0)*13年薪 from emp  order by sal*13+isnull(comm,0)*13 asc
    select ename,(sal+isnull(comm,0))*13年薪 from emp  order by sal*13+isnull(comm,0)*13 asc


    复杂查询:

    --如果结果要是很多的话就必须用到分页查询
    --如何显示所有员工中工资最高和工资最低
    --如何显示最低工资和该雇员的名字
    select ename,sal from emp where sal=(select min(sal) from emp)

    --显示所有员工的平均工资和工资总和
    --把高于平均工资的雇员名字和他的工资显示,并显示平均工资
    select avg(sal)平均工资,sum(sal)总工资 from emp
    select ename,sal,(select avg(sal) from emp)平均工资 from emp where sal>(select avg(sal) from emp)

    --计算共有多少员工
    select count(*)员工数 from emp
     
    --显示工资最高的员工的名字,工作岗位
    select ename,job from emp where sal=(select max(sal) from emp)

    --显示工资高于平均工资的员工信息
    select * from emp where sal>(select avg(sal) from emp)

    --group by用于对查询的结果分组统计;having子句用于限制分组显示结果
    --如何显示每个部门的平均工资和最高工资,并显示部门名称
    select avg(sal)平均工资,max(sal)最高工资,deptno from emp group by deptno


    --显示每个部门的每种岗位的平均工资和最低工资
    select avg(sal)平均工资,min(sal)最低工资,deptno,job from emp group by deptno,job order by deptno


    --显示平均工资高于2000的部门号和它的平均工资,并按照从低到高顺序
    select deptno,avg(sal)平均工资 from emp group by deptno having avg(sal)>2000 order by avg(sal) asc

  • 相关阅读:
    七 、linux正则表达式
    六、通配符
    Codeforces1099D.Sum in the tree(贪心)
    叮,出现!
    Codeforces1056E.Check Transcription(枚举+Hash)
    2018.11.25 AMC-ICPC 亚洲区域赛(焦作站)吊银
    Gym101889J. Jumping frog(合数分解+环形dp预处理)
    Gym101889E. Enigma(bfs+数位)
    Gym101889B. Buggy ICPC(打表)
    Codeforces1076F. Summer Practice Report(贪心+动态规划)
  • 原文地址:https://www.cnblogs.com/Jasxu/p/sql.html
Copyright © 2011-2022 走看看