美文网首页大数据学习+数据库知识程序员
SQL语句常用命令整理---单表查询

SQL语句常用命令整理---单表查询

作者: Elder | 来源:发表于2016-12-11 16:54 被阅读191次

    SQL常用命令一直记得很模糊几乎每次使用的时候都需要上网查询,感觉数据库查询,应该是每个程序员的基本功啊,所以集中时间学习和练习了一些SQL语句的常用命令。这里先推荐两个网站W3School在线学习网站和SQL Fiddle在线练习网站。希望能够帮助到大家~~~

    初始化Test表

    • 创建Test表
    DROP TABLE IF EXISTS test;
    CREATE TABLE test (
        _id integer PRIMARY KEY AUTOINCREMENT,
        empno integer(11) NOT NULL,
        name varchar NOT NULL,
        job varchar,
        mgr integer(11) ,
        hirdate date NOT NULL,
        sal double (8, 2),
        comm double(8,2),
        deptno integer(11)
    );
    
    • 插入数据
    INSERT INTO test
    (empno,name,job,mgr,hiredate,sal,comm,deptno)
    VALUES 
    ('7369', 'SMITH', 'CLERK', '7902', '2011-03-12', '800.00', null, '20'),
    ('7499', 'ALLEN', 'SALESMAN', '7698', '2012-03-12', '1600.00', '300.00', '30'),
    ('7521', 'WARD', 'SALESMAN', '7698', '2013-03-12', '1250.00', '500.00', '30'),
    ('7566', 'JONES', 'MANAGER', '7839', '2011-03-12', '2975.00', null, '20'),
    ('7654', 'MARTIN', 'SALESMAN', '7698', '2011-03-12', '1250.00', '1400.00', '30'),
    ('7698', 'BLAKE', 'MANAGER', '7839', '2011-03-12', '2850.00', null, '30'),
    ('7782', 'CLARK', 'MANAGER', '7839', '2015-03-12', '2450.00', null, '10'),
    ('7788', 'SCOTT', 'ANALYST', '7566', '2011-03-12', '3000.00', null, '20'),
    ('7839', 'KING', 'PRESIDENT', null, '2011-03-12', '5000.00', null, '10'),
    ('7844', 'TURNER', 'SALESMAN', '7698', '2014-03-12', '1500.00', '0.00', '30'),
    ('7876', 'ADAMS', 'CLERK', '7788', '2016-03-12', '1100.00', null, '20'),
    ('7900', 'JAMES', 'CLERK', '7698', '2015-03-12', '950.00', null, '30'),
    ('7902', 'FORD', 'ANALYST', '7566', '0000-00-00', '3000.00', null, '20'),
    ('7934', 'MILLER', 'CLERK', '7782', '2011-03-12', '1300.00', null, '10');
    

    简单查询

    • 查询表中的所有数据
    SELECT *
    FROM test
    
    • 查询所有员工的姓名、工号和岗位。
    SELECT name,empno,job
    FROM test
    
    • 查询所有员工的年薪
      Mysql中支持 + - * / %等数学运算。
    -- as 起别名使查询结果更直观
    SELECT name,sal * 12 as totalSal
    FROM test
    
    • 查询结果的拼接显示
    SELECT CONCAT(ename,"的年薪为",sal * 12,"美元") AS total
    FROM t_employee
    

    CONCAT 采用数量可变的字符串自变量并将它们连接到单个字符串。 它需要至少两个输入值;否则将引发错误。 所有参数都隐式转换为字符串类型,然后串联在一起。 Null 值被隐式转换为空字符串。

    • 结果:
    total
    SMITH的年薪为9600.00美元
    ALLEN的年薪为19200.00美元
    WARD的年薪为15000.00美元
    JONES的年薪为35700.00美元

    条件查询

    条件查询的完整语句结构如下:

    select field1,field2,field3... from 表名 where 条件;
    

    条件中,支持下列内容

    • 关系运算符和逻辑运算符关系运算符:
      • > < = != >= <=
    • 逻辑运算符:
      • and && or || xor(异或) not !
    • between… and … : 范围查询
    • is null / is not null: 是否为null/是否不为null
    • in:枚举类型范围查询
    • like : 模糊查询

    • 查询工作为CLERK,并且薪水大于800的员工信息
    select * from t_employee where job = 'CLERK' and sal > 800;
    select * from t_employee where job = 'CLERK' && sal > 800;
    
    • 查询薪水在800和1500之间的员工信息
    select * from t_employee where sal between 800 and 1500;
    -- 或者
    select * from t_employee where sal>=800 and sal<=1500;
    

    ** 注意这是一个前闭后闭的集合。**

    • 查询薪水不在800和1500之间的员工信息
    select * from t_employee where sal not between 800 and 1500;
    select * from t_employee where sal >1500 or sal<800;
    
    • 查询mgr为null的员工的信息/查询comm奖金不为null的员工的信息
    SELECT * FROM t_employee WHERE mgr IS NULL;
    select * from t_employee where mgr is not null;
    
    • 查询工号不是7521、7782、7566和7788的员工信息
    select * from t_employee where empno not in (7521,7782,7566,7788);
    select * from t_employee where empno != 7521 && empno != 7782 
    && empno != 7566 and empno != 7788;
    
    • 查询员工姓名中以A开头的员工的信息
    SELECT * FROM t_employee WHERE ename LIKE ("A%");
    
    • 查询员工姓名中第二个字母为A的员工的信息
    select * from t_employee where ename like '_A%';
    
    • 查询员工姓名中含A的员工的信息
    SELECT * FROM t_employee WHERE ename LIKE ("%A%");
    

    查詢結果排序

    • 查询所有员工信息,并将员工按照工资的升序排列/降序排列
    SELECT * FROM t_employee order by sal ASC;
    select * from t_employee order by sal desc;
    

    ** 注意:在Mysql中,如果字段的值为null,则该值为最小值,因此在降序排序中将最后显示,而在升序排序中则将最先显示。**

    • 多字段排序:查询所有员工信息,并将员工按照工资的升序排列,如果工資相同,則安裝入職日期降序排序
    SELECT * FROM t_employee order by sal asc,hiredate DESC;
    

    限制數據查詢數量(分頁查詢)

    • 分頁查詢全部員工信息,每頁查詢5條。
    SELECT * FROM t_employee limit 0,5;-- 第一页
    select * from t_employee limit 5,5;-- 第二页
    select * from t_employee limit 10,5;-- 第三页
    

    ** 如果客戶端發送來的數據是頁碼和每頁條數,則公式爲 limit (頁碼-1)*每頁條數,每頁條數 **

    • 查詢獎金爲null的前兩條記錄。
    SELECT * FROM t_employee where comm is null limit 0,2;
    

    統計函數

    • 查詢公司領取獎金的人數。
    select count(comm) from t_employee where comm != 0;
    
    • 查詢員工領取獎金的平均值。
    select avg(comm) from t_employee where comm != 0;
    

    AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

    • 查詢所有員工工資的總和
    select sum(sal) from t_employee;
    
    • 查詢員工中最高工資和最低工資
    select max(sal),min(sal) from t_employee;
    

    分組數據查詢

    • 查詢每個部門員工的工資總和
    select deptno, sum(sal) from t_employee group by deptno; 
    
    • 查詢每個部門員工的人數、工資總和、平均工資、最高工資和最低工資
    select deptno,count(ename),sum(sal),avg(sal),max(sal),min(sal) 
    from t_employee 
    group by deptno;
    
    • 按照部門編號和入職日期分組,統計每組的工資總和、平均工資
    select deptno,hiredate,sum(sal),avg(sal)
    from t_employee
    group by deptno,hiredate;
    
    • 按照部門編號分組,查詢每組工資總和大於2000的部門的人數、總工資、平均工資。
    select deptno,count(*),sum(sal),avg(sal) 
    from t_employee
    group by deptno
    having sum(sal) > 2000;
    

    ** where條件和having條件的區別 **

    1. having不能单独使用一般和组函数一起使用,用在group by后面来完成分组的数据的筛选;where和组函数一起使用时,会在group by之前进行筛选结果,优先级高于group by;
    2. where作用在硬盘上的数据,having作用在内存中的数据,所以where效率高,在兩者都能使用的情況下,優先選擇where;
    3. where后面不能跟别名 having可以。

    更新操作

    • 设置SMITH员工的奖金为300
    update t_employee set comm = 300 where ename = `SMITH`;
    

    删除操作

    • 删除姓名SMITH的记录
    delete from t_employee where ename = SMITH;
    
    • 删除全部数据
    delete from t_employee ;
    或
    truncate student;
    
    • 两者区别:
      • delete 将删除的条数返回,truncate则返回0;
      • delete 较慢,而truncate则速度快;
      • delete 不会改变自增值,而truncate则会讲自增值置为1从头开始;
      • drop table 表名;整个表都删除

    以上就是常用单表查询的一些命令收集了,接下来再学习多表联合查询。


    相关文章

      网友评论

      • ShowBone:可以当快速查找哈哈
        Elder: @ShowBone 嗯嗯~哈哈,查找起来很方便啊。
      • 8dbd43fd6ce5:还有下文不?
        Elder: @皮皮岛 还有一篇多表查询的~亲

      本文标题:SQL语句常用命令整理---单表查询

      本文链接:https://www.haomeiwen.com/subject/ygtpmttx.html