zoukankan      html  css  js  c++  java
  • sql单表查询总结

    数据的查询

    1. 单表查询

    查询全体学生的学号和姓名 :

    select Sno,Cno from sc;
    
    select * from sc;
    

    目标表达式不仅可以是表中的属性列,也可以是表达式没字符串常量、函数等 别名(aliases)。
    查询全体学生的姓名及出生年份:

    select Sname Sage-2014 from sc;//查询结果的第二列是一个算术表达式
    select LOWER(cname) from course;//使cname都小写。
    select LOWER(cname) 小名 from course;
    
    • distinct(删除重复行 默认是all)
    select distinct Sno from sc;
    
    • 起别名(①as ②空格)

    当别名有空格的时候最好用""修饰

    • ‘+’
    作用:做加法运算
    select 数值+数值;直接运算
    select 字符+数值;先试图将字符转化为数值,如果转化成功就继续运算,如果转化不成功,那么转化为0,在做运算
    select null+值;结果都为null
    
    • concat()函数(拼接字符串)
    select concat(str1,str2,str3,...);
    
    • ifnull函数
    功能:判断某个字段或者表达式是否为null,如果weinull返回指定的值,否则返回原本的值。
    select ifnull(commission_pct,0) from employees;
    
    1. between…and…。
    select Sname,Sdept,Sage from student where Sage
    between 20 and 30;
    查询年龄在20~30[包括2030]之间的学生的姓名、系别、年龄)
    
    1. in 可以确定集合 可以用来查找属性值属于指定集合的元组
    select Sname,Ssex from student where Sdept in('CS','MA','IS');
    //查询cs ma is学生的姓名和性别。
    
    1. like ,not like
    • %代表任意长度的字符串
    • _代表任意单个字符。
    • 代表转义字符
    select * from student where sno like 'a%b';
    //查询 以a开头以b结尾的任意长度字符串
    select * from student where sname like '刘%';
    // 查询姓刘的学生的姓名、学号、班级
    select * from student where Cname like 'DB\_%i__';
    // 查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况
    
    1. NULL NOT NULL
    //查询 分数为空的学生学号和姓名。
    select Sno,Cno from student  where grade is null;
    
    1. AND 和 or and优先级高于or,但是用户可以用括号改变优先级。
    // 查询cs系在年龄20岁以下的学生姓名。
    select sname from student where sdept='CS' and Sage<20;
    
    1. order by 排序 asc升序 desc 降序(默认是Asc)
    select * from employees order by salary desc;
    //按工资降序排列
    select * from employees where department_id>=90 order by hiredate asc
    //查询部门编号大于90的员工信息,按入职时间的先后顺序进行排序
    select *,salary*12*(1+ifnull(commison_pct,0)) 年薪from employees order by salary*12*(1+ifnull(commison_pct,0)) desc;
    //按年薪高低显示员工的信息 年薪(表达式 别名都可以实现)
    select * from empolyees order by 字段A asc,字段B desc 
    //实现多个字段的排序 
    select last_name,salary from empolyees where salary not between 8000 and 17000 order by salary desc;
    //选择工资在8000到17000的员工的姓名和工资。
    
    1. 聚集函数 只能用于select 子句和group by 中的having子句
    • count(*) 统计元组个数
    • count([distanct|all]<列名>) 一列中值的总个数
    • sum([distanct|all]<列名>) 一列值中的总和
    • avg([distanct|all]<列名>) 一列值中的平均值
    • max([distanct|all]<列名>) 一列值中的最大值
    • min([distanct|all]<列名>) 一列之中的最小值
    统计一列中的值的个数
    select count(*) from student;
    // 查询学生总人数
    select count(distinct sno) from sc;
    //查询选修了课程的学生人数。
    select avg(grade) from sc where cno='1';
    // 计算选修一号课程的学生的最高分数。
    
    
    1. group by 分组后聚集函数将作用于每一个组,即每一组都有一个函数。
    • 分组查询语法
    select 分组函数  列(要求出现在group by后面) 
    from 
    [where 筛选语句]
    group by 分组的列表
    [order by 子句]
    

    注意查询的列表按要求是分组函数和group by后出现的字段

    • 分组函数使用例子
    1. 简单的分组查询(添加分组前的筛选)
    //查询每个位置上的部门个数
    select count(*),location_id from departments group by location_id;
    
    //查询邮箱中包含a字符,每个部门的平均工资
    select avg(salary),department_id from employees where email like '%a%' group by department_id;
    
    //查询有奖金的每个领导手下员工的最高工资
    select max(salary), manager_id from empolyees where commission_pct is not null group by manager_id;
    
    //
    

    2. 复杂一些的分组查询(添加分组后的筛选或者混合分组前的)

    //查询哪个部门的员工的个数>2
    ①查询每个部门的员工个数
    ②再根据①进行筛选,查询结果集里面员工个数>2
    //①
    select count(*) ,department_id from employees group by department_id
    //②
    select count(*) ,department_id from employees group by department_id having count(*)>2;
    
    //查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
    select max(salary),job_id from employees where commission_pct is not null group by job_id having max(salary)>12000;
    

    where子句和having短语的区别在于作用的对象不同。where子句作用于基本表或者视图,having短语作用于组。

    再次强调聚集函数只能于select子句和group by中的having子句

  • 相关阅读:
    hdu 1017 A Mathematical Curiosity 解题报告
    hdu 2069 Coin Change 解题报告
    hut 1574 组合问题 解题报告
    hdu 2111 Saving HDU 解题报
    hut 1054 Jesse's Code 解题报告
    hdu1131 Count the Trees解题报告
    hdu 2159 FATE 解题报告
    hdu 1879 继续畅通工程 解题报告
    oracle的系统和对象权限
    oracle 自定义函数 返回一个表类型
  • 原文地址:https://www.cnblogs.com/narojay/p/10812636.html
Copyright © 2011-2022 走看看