zoukankan      html  css  js  c++  java
  • MySQL数据查询(重点)

    1.查询所有列   * 为所有列

    select * from table_name;

    2.查询指定列

    select id,age from table_name;

    3.查询时添加常量列-------本次查询有效,不会添加到表中,只显示  可以用as命名本列名

    select 'java0328' from table_name;

    select 'java班' as '班级' from table_name;

    4.查询时合并列------只能合并类型为数值的字段

    select  (html + js)from table_name;

    5.查询时去除重复记录-------字段名加不加括号效果一样

    select distinct sex from table_name;

    6.条件查询   where

    select * from class0328 where html = '88';  

      6.1逻辑条件and(与:都要满足)  or(或:满足其中一个即可)

    select *from class0328 where sex = '男' and html = '88';    合集

    select * from class0328 where sex = '男' or html < 30;      交集

      6.2比较条件: <    >    >=     <=  =      <>(不等于)     between    and (等价于   >= and   <=);

    需求: 查询html成绩大于70分的学生

    select * from class0328  where html > 70;

    需求: 查询js成绩大于等于75,且小于等于90分的学生

    select * from class0328 where js between 75 and 90;(包前包后)

    或者  select * from class0328 where js >= 75 and <= 90;

      6.3判空条件(null 空字符串):

      当字段内没有值 null,id = ‘1’,sex =null, 当字段内为空字符串单有字段时,也就是有值!,值为 ‘ ’, 比如 id = ‘1’,sex = ''

      is null / is not null                 = ' ' / <>' '

    查询年龄为空的学生信息:

    select * from class0328 where age is null;

    显示姓名为空字符串的字段:

    select *from class0328 where ename = ' ';

    需求: 查询有地址的学生(不包括null和空字符串)

    select * from class0328 where is not null and address <>'';

      6.4模糊条件like

      通常使用一下替换标记:

      %:百分号表示任意个字符

      _:一个下划线表示一个字符

      需求: 查询姓‘张’的学生

    select * from class0328 where ename like '张%';      对名字的长度没有限制,都可以查询到

       需求:查询名字字数为两位的学生

    select * from class0328 where ename like '__';          两个下划线表示 值长度为两个字符

      6.5聚合查询(使用聚合函数的查询)

      常用的聚合函数: sum() 求和函数   avg()平均函数   max()最大函数 min()最小函数    count()统计数值函数

      注意:聚合函数()不能有空格,否则会报错!!!

      count()函数统计的数量不包含null的数据

      使用count统计表的记录数,要使用不包含null值字段

      查询 js 成绩的总成绩

      select sum(js) from class0328;

      查询 js 成绩的平均分

      select avg(js) from class0328;

      查询当前 js 最高分

      select max(js) from class0328;

      查询当前 js 最低分
      select min(js) from class0328;

      统计当前一共有多少个 js 的成绩

      select count(js) from class0328;

      6.6分页查询 : limie 起始行查询几行;

      起始行从0开始

      分页:当前页 每页显示多少条

      分页查询当前页的数据的sql公式:

      select * from class0328 limit(当前页 - 1) * 每页显示多少行 , 每页显示多少行;

           -- 需求: 查询第1,2条记录(第1页的数据)

      SELECT * FROM student LIMIT 0,2;

      -- 查询第3,4条记录(第2页的数据)

      SELECT * FROM student LIMIT 2,2;

      -- 查询第5,6条记录(第3页的数据)

      SELECT * FROM student LIMIT 4,2;

      -- 查询第7,8条记录 (没有记录不显示)

      SELECT * FROM student LIMIT 6,2;

      6.7查询排序order by

      语法 order by 字段 asc / desc

      asc:顺序:正序;数值:递增,越来越大;字母:自然顺序(a-z)

      desc: 顺序:序;数值递减,越来越小;字母:自然反序(z-a) 

      默认情况下,按照插入记录顺序排序

      SELECT * FROM student;

       需求: 按照id顺序排序

      SELECT * FROM student ORDER BY id ASC;

      SELECT * FROM student ORDER BY id; -- 默认正序

      SELECT * FROM student ORDER BY id DESC;-- 反序

        注意:多个排序条件,中间用逗号隔开

        需求: 按照servlet正序,按照jsp的倒序

    SELECT * FROM student ORDER BY servlet ASC,jsp DESC;

      6.8分组查询(group by)

      需求: 查询男女的人数

           1) 把学生按照性别分组(GROUP BY gender)

         2) 统计每组的人数(COUNT(*))

      SELECT gender,COUNT(*) FROM student GROUP BY gender;

      分组查询后筛选  (having)

      需求: 查询总人数大于2的性别

      SELECT gender,COUNT(*) FROM student

       WHERE GROUP BY gender HAVING COUNT(*)>2 ;

      注意 分组之前条件使用where关键字,分组之后条件使用having关键字

    练习题:

    USE test02;
    CREATE TABLE day02(
        empno INT,
        ename VARCHAR(10),
        job VARCHAR(10),
        mgr INT,
        hiredate DATE,
        sal DOUBLE,
        COMM DOUBLE,
        deptno INT
    )
    SELECT * FROM day02;
    INSERT INTO day02 VALUES(1001,'甘宁','文员',1013,'2000-12-17',8000.00,NULL,20);
    INSERT INTO day02 VALUES(1002,'黛琦丝','销售员',1006,'2001-02-20',16000.00,3000.00,30);
    INSERT INTO day02 VALUES(1003,'殷天正','销售员',1006,'2001-02-22',12500.00,5000.00,30);
    INSERT INTO day02 VALUES(1004,'刘备','经理',1009,'2001-04-02',29750.00,NULL,20);
    INSERT INTO day02 VALUES(1005,'谢逊','销售员',1006,'2001-09-28',12500.00,14000.00,30);
    INSERT INTO day02 VALUES(1006,'关羽','经理',1009,'2001-05-01',28500.00,NULL,30);
    INSERT INTO day02 VALUES(1007,'张飞','经理',1009,'2001-09-01',24500.00,NULL,10);
    INSERT INTO day02 VALUES(1008,'诸葛亮','分析师',1004,'2007-04-19',30000.00,NULL,20);
    INSERT INTO day02 VALUES(1009,'曾阿牛','董事长',NULL,'2001-11-17',50000.00,NULL,10);
    INSERT INTO day02 VALUES(1010,'韦一笑','销售员',1006,'2001-09-08',15000.00,0.00,30);
    INSERT INTO day02 VALUES(1011,'周泰','文员',1008,'2007-05-23',11000.00,NULL,20);
    INSERT INTO day02 VALUES(1012,'程普','文员',1006,'2001-12-03',9500.00,NULL,30);
    INSERT INTO day02 VALUES(1013,'庞统','分析师',1004,'2001-12-03',30000.00,NULL,20);
    INSERT INTO day02 VALUES(1014,'黄盖','文员',1007,'2002-01-23',13000.00,NULL,10);
    INSERT INTO day02 VALUES(1015,'张三','保洁员',1001,'2013-05-01',80000.00,50000.00,50);
    /*1.查出部门编号为30的员工*/
    SELECT ename FROM day02 WHERE deptno = '30';
    /*2.所有销售员的姓名、编号和部门编号*/
    SELECT empno,ename,deptno FROM day02;
    /*3.找出奖金高于工资的员工*/
    SELECT ename FROM day02 WHERE COMM > sal;
    /*4. 找出奖金高于工资60%的员工*/
    SELECT ename FROM day02 WHERE COMM > (sal * 0.6);
    /*5.找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料*/
    SELECT * FROM day02 WHERE (deptno = '10' AND job = '经理') OR (deptno = '20' AND job = '销售员');
    /*6. 找出部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料*/
    SELECT * FROM day02 WHERE (deptno = '10' AND job = '经理') OR (deptno = '20' AND job = '销售员') 
    OR (job <> '经理' AND job <> '销售员' AND sal >= '20000');
    /*7. 无奖金或奖金低于1000的员工。*/
    SELECT ename FROM day02 WHERE COMM IS NULL OR COMM < 1000;
    /*8. 查询名字由三个字组成的员工*/
    SELECT ename FROM day02 WHERE ename LIKE '___';
    /*9.查询2000年入职的员工*/
    SELECT ename FROM day02 WHERE hiredate LIKE '2000%';
    /*10. 查询所有员工详细信息,用编号升序排序*/
    SELECT * FROM day02 ORDER BY empno ASC; 
    /*11. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序*/
    SELECT *FROM day02 ORDER BY sal DESC,hiredate ASC;
    /*12.    查询姓周的两个名字的员工。*/
    SELECT ename FROM day02 WHERE ename LIKE '周_';
    /*13.    查询所有姓张的员工*/
    SELECT ename FROM day02 WHERE ename LIKE '张%';
    /*14.查询该部门有多少个岗位,每个岗位有多少人*/
    SELECT deptno,job,COUNT(job) FROM day02 GROUP BY job;
    /*15.查询哪个岗位中人数大于3*/
    SELECT job,COUNT(*) FROM day02 GROUP BY job
    HAVING COUNT(*) > 3;
  • 相关阅读:
    补充缺失日期及对应数据
    通过拆分字段优化SQL
    left join 改写标量子查询
    对数据按组排序
    注册通用验证用户filter
    asp.net mvc FormsAuthentication一些问题
    il code swtich
    C# Equals
    Linq源代码阅读
    dotnet il editor 调试 iis 程序
  • 原文地址:https://www.cnblogs.com/0328dongbin/p/8991869.html
Copyright © 2011-2022 走看看