zoukankan      html  css  js  c++  java
  • 数据库的查——select的基本使用

    --创建学生表

    create table students (
        id int unsigned not null auto_increment primary key,
        name varchar(20) default '',
        age tinyint unsigned default 0,
        high decimal(5,2),
        gender enum('男', '女', '中性', '保密') default '保密',
        cls_id int unsigned default 0,
        is_delete bit default 0
    );

    --往students表里插入数据

    insert into students values
    (0,'小明',18,180.00,1,1,0),
    (0,'小月月',19,180.00,1,2,0),
    (0,'彭于晏',28,185.00,1,1,0),
    (0,'刘德华',58,175.00,1,2,0),
    (0,'黄蓉',108,160.00,2,1,0),
    (0,'凤姐',44,150.00,4,2,1),
    (0,'王祖贤',52,170.00,2,1,1),
    (0,'周杰伦儿',34,null,1,1,0),
    (0,'程坤',44,181.00,1,2,0),
    (0,'和珅',55,166.00,1,2,0),
    (0,'刘亦菲',29,162.00,2,3,0),
    (0,'金星',45,180.00,3,4,0),
    (0,'静香',18,170.00,2,4,0),
    (0,'郭靖',22,167.00,1,5,0),
    (0,'周杰',33,178.00,1,1,0),
    (0,'钱小豪',56,178.00,1,1,0),
    (0,'谢霆锋',38,175.00,1,1,0),
    (0,'陈冠希',38,175.00,1,1,0);  

    简单查询:

    -- 查询所有列
      --select * from 表名

    select * from students;

    --一定条件查询(where)

    select * from where id=5;

    -- 查询制定列

    select id_name from students;

    -- 使用as给字段起别名

    select id_name as '别名(alias)'
    select name as '姓名', age as '年龄', high, gender from students;

    -- 通过表名字段查询
      select 库名/表字段/* from students;

    select * from students;
    select students.* from students;
    eg: mysql
    > select test.students.* from test.students;

    -- 给表起别名查询

    select s.id,s.name,s.age from students as s;

    --消除重复行
      -- distinct

    select distinct age from students;

    条件查询

    --比较运算符
      -- 查询年纪大于18岁的信息

    select * from students where age > 18;

     

     --18岁到28岁之间(and)

    select * from students where age >= 18 and age =< 28;
    select * from students where age >= 18 || age =< 28;(有时会报错)
    select * from students where age between 18 and 28

     

     --在18岁以上或者身高180以上的人(or)

    select * from students where age > 18 or high > 180; 

      -- 查询年纪等于18岁和年纪等于28的人

    select * from students where age=18 or age=28; 

    模糊查询:

    -- like
      % 替代1个或者多个甚至是没有

      -- 查询姓名中有‘小’的所有名字

    select * from students where name like '%小%';

     

     -- 查询两个字人的名字

    select * from students where name like '_ _';(_代表一个字符)

     

     -- 查询至少有2个字的名字

    select * from students where name like '%_ _%';

    范围查询

    -- in (1,3,8)表示在一个非连续的范围内

      -- 查询 年纪为18和34的人

    select * from students where age in (18, 34);
    select * from students where age=18 or age=34;

      

    -- 查询 年纪不包含18和34的人(取反)

    select * from students where age not in (18, 34);

      --查询 年龄在17岁到34岁之间的信息

    select * from students where age between 17 and 34;

      

    --查询 年纪不在18到34岁的信息

    select * from students where age not between 17 and 34;  

    空判断

    -- 判断is null

      -- 查询身高为空的信息

    select * from students where high is null;

     

     -- 判断非空is not null

    select * from students where high is not null;

    排序

    -- order by 字段(eg:name、age、id)
    -- asc 从小到大排列,即升序(不写默认为asc)
    -- desc 从大到小排序,即降序

      -- 查询年纪在18到34岁之间的男性,按照年纪从小到大

    select * from students where gender=1 and age between 18 and 34 order by age; 

      

    -- 查询年纪在18到34岁之间的女性,身高从高到矮

    select * from students where gender=2 and age between 18 and 34 order by high desc;

    -- order by 多字段
      -- 查询年纪在18到34岁的女性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序

    select * from students where age between 18 and 34 and gender=2 order by high desc;

      -- 按照年纪、身高排序(如果年纪相同的情况下按照身高从小到大排序)

    select * from students where order by age,high asc;
    

      -- 查询年纪在18到34岁的男性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序,

        如果年龄也相等那么按照id从小到大排序;

    select * from students where age between 18 and 34 and gender=1 order by high desc, age, id desc;

    聚合函数

    -- 总数
    -- count
      -- 查询有多少人

    select count(name/age/high) from students; 
    

      (统计当前字段,如果要统计的数据为null(空),会出现统计错误,所以一般用*)

     

     -- 查询有多少人(并且显示中文)

    select count(*) as '总人数' from students; 

     

     -- 查询男性有多少人

    select count(*) from students where gender=1;  


    -- 最大值max
      -- 查询最大的年纪

    select max(age) from students; 
    

      -- 查询女性的最高 身高

    select max(high) from students where gender=2;

    -- 最小值min
      -- 查询最高的人

    select min(high) from students;

    -- 求和sum
      -- 计算所有人的年龄总和

    select sum(age) from students;

    -- 平均值avg
      -- 计算平均年纪
      -- 计算平均年纪 sum(age)/count(*)

    select sum(age)/count(*) from students;
    select avg(age) from students;

     

     -- 保留2位小数

    select round(avg(age),2) from students;

    分组(分组的优先级最高,一条语句中先分组)

    -- group by
      -- 按照性别分组,查询所有的性别

    select gender from students group by gender; 

     

     -- 计算每组性别的人数

    select gender,count(*) from students group by gender;
    

      

    --group_concat(函数,和group by配合使用)
      -- 查询性别组中的男女平均年龄及姓名

    select gender,group_concat(name),avg(age) from students group by gender; 
    

      

    -- having
      -- 查询每个性别平均年纪超过30岁的性别,以及姓名 having avg(age) > 30

    select gender, group_concat(name) from students group by gender having avg(age) > 30;

     

     -- 查询每种性别中的人数多于4个的组的信息

    select gender,group_concat(name) from students group by gender having count(*)>4;
    

      

    分页

      -- 显示5页

    select * from students limit 5;

     

     -- 查询年纪最大的人名(先按照年纪排序,再分页)

    select * from students order by age desc limit 1;
    

      

     

     

     -- 分页显示,每页显示2条数据

    select * from students limit 0,2;
    

      

     

     -- 按照身高从高到矮排序,查找出所有女性,并且分页显示,每页显示2条数据

    select * from students where gender=2 order by high desc limit 0,2;
  • 相关阅读:
    Algorithm Of Swift -- 4.合并两个有序数组
    Algorithm Of Swift -- 3.链表反转
    Algorithm Of Swift -- 2.字符串反转
    Algorithm Of Swift -- 1.两数之和
    1850984: Fix: crash when running am.jar without parameters
    微信公众号关联小程序,实现消息推送。
    NPOI根据Excel数据导入导出到Datatable中--帮助类
    OpenCvSharp+ZXing实现多个DataMatrix解析
    多数据源导致事务不生效
    android theme之Material的默认色和夜晚模式
  • 原文地址:https://www.cnblogs.com/twoo/p/11830067.html
Copyright © 2011-2022 走看看