• mysql初识(二) 基础的查询语句


    mysql 查询语句


    语句顺序
    select 选择的列
    from 表
    where 查询的条件
    group by   分组属性  having 分组过滤的条件 通常与计算语句结合在一起
    order by 排序属性
    limit 起始记录位置,取记录的条数   
    其中
    select 选择的列
    from 表
    where 查询的条件
    以上是基本的结构




    最基础的查询test表所有选项
    mysql> select * from test;
    +------+-------+-----+----+
    | id   | name  | age | sex|
    +------+-------+-----+----|
    | 0001 | 小明  |  14 | 男 |
    | 0002 | 小红  |  12 | 女 |
    | 0003 | 小红2 |  12 | 女 |
    | 0004 | 小红3 |  12 | 女 |
    | 0005 | 小黄  |  16 | 男 |
    | 0006 | 小绿  |  15 | 男 |
    +------+-------+-----+----+
    另一种将表所有信息都打印出来(不推荐,多表关联时比较麻烦)
    mysql> select * from testG;
    *************************** 1. row ***************************
       id: 0001
     name: 小明
      age: 14
      sex: 男
    hobby: 宅
    money: 2333.23
    *************************** 2. row ***************************
    .....
    在select中*带表全部 也可以特定字段查询 要显示多个字段就用“,”链接
    mysql> select name from student;
    +--------+
    | name   |
    +--------+
    | 小明   |
    | 李雷   |
    | 韩梅梅 |
    +--------+
    3 rows in set (0.00 sec)

    mysql> select name,age from student;
    +--------+------+
    | name   | age  |
    +--------+------+
    | 小明   |   13 |
    | 李雷   |   14 |
    | 韩梅梅 |   16 |
    +--------+------+
    3 rows in set (0.00 sec)

    可以给字段起个别名
    mysql> select name as '名字' from student;
    +--------+
    | 名字   |
    +--------+
    | 小明   |
    | 李雷   |
    | 韩梅梅 |
    +--------+

    as可省, 要显示多个字段的时候依然是逗号链接
    mysql> select name as 'mingzi',age as 'nianling' from student;
    +--------+----------+
    | mingzi | nianling |
    +--------+----------+
    | 小明   |       13 |
    | 李雷   |       14 |
    | 韩梅梅 |       16 |
    +--------+----------+

    合并两个字段concat************************************
    mysql> select concat(name,'/',sex) from student;
    +----------------------+
    | concat(name,'/',sex) |
    +----------------------+
    | 小明/男              |
    | 李雷/男              |
    | 韩梅梅/女            |
    | aboy/男              |
    | 小明/男              |
    | 李大锤/女            |
    | MrJoker/男           |
    | mingzdi/男           |
    | 新人/男              |
    | 又一个新人/女        |
    | newboy/男            |
    | oldboy/男            |
    +----------------------+

    逻辑判断符********************************
    将小明的年龄修改成一岁
    update student set age=1 where name='小明';
    删除年龄小于10岁的同学
    delete from student where age<10;
    查找年龄大于10岁的同学
    select * from student where age>10;
    查找年龄在10到15之间的
    select * from student where age>10 and age<15;
    查找年龄在大于15或者年纪小于10的同学
    select * from student where age<10 or age>15;

    < > = or and 这些是逻辑判断符
    其中如果执行的条件恒成立则表信息全部出来 这样比较危险
    select * from student where age>10 or 1=1;


    将查询结果和自身比较 成立返回1 不成立则0
    mysql> select age,age>15 as '年龄大于十五的' from student;
    +------+----------------+
    | age  | 年龄大于十五的 |
    +------+----------------+
    |   14 |              0 |
    |   14 |              0 |
    |   16 |              1 |
    +------+----------------+

    去除重复条数distinct*****************************************
    mysql> select distinct age,name from student;
    注意 就拿上一条命令来说 如果age和name中有一个与之不同则都会显示  distinct 后的东西要完全一样才会去除重复的 注意一下两条命令结果的区别
    mysql> select distinct id,age,name from student;
    +----+------+--------+
    | id | age  | name   |
    +----+------+--------+
    |  1 |   14 | 小明   |
    |  2 |   14 | 李雷   |
    |  3 |   16 | 韩梅梅 |
    |  6 |   14 | 小明   |
    +----+------+--------+
    4 rows in set (0.00 sec)

    mysql> select distinct age,name from student;
    +------+--------+
    | age  | name   |
    +------+--------+
    |   14 | 小明   |
    |   14 | 李雷   |
    |   16 | 韩梅梅 |
    +------+--------+
    3 rows in set (0.00 sec)

    清空表数据
    truncate student;
    他和delete的区别就是用delete删除的虽然内容清空但id位置还保留 如果添加新的条数则按之前最大id顺着向下排   而truncate则是初始化表 保留表结构而且id也是重置从0开始排


    查找set类型数据
    先创建一个表
    mysql> create table test5(
        -> hobby set('篮球','足球','乒乓球')
        -> );
    mysql> select * from test5;
    +------------------+
    | hobby            |
    +------------------+
    | 篮球,足球,乒乓球 |
    | 篮球,足球        |
    | 篮球,乒乓球      |
    | 足球             |
    +------------------+
    1.只找只有喜欢足球的
    mysql> select * from test5 where hobby='足球';
    +-------+
    | hobby |
    +-------+
    | 足球  |
    +-------+
    2.找set类型数据中有‘足球’选项的条数
    mysql> select * from test5 where find_in_set('足球',hobby);
    +------------------+
    | hobby            |
    +------------------+
    | 篮球,足球,乒乓球 |
    | 篮球,足球        |
    | 足球             |
    +------------------+
    3.模糊查询 查询字段中包含‘足球’这个名字的信息
    mysql> select * from test5 where hobby like '%足球%';
    +------------------+
    | hobby            |
    +------------------+
    | 篮球,足球,乒乓球 |
    | 篮球,足球        |
    | 足球             |
    +------------------+
    4.使用符号& 这个是取的2的n次方 set选项中的第一个第二个第三个分别对应着&1 &2 &4 以此类推
    mysql> select * from test5 where hobby &2;
    +------------------+
    | hobby            |
    +------------------+
    | 篮球,足球,乒乓球 |
    | 篮球,足球        |
    | 足球             |
    +------------------+
    推荐3方法 2方法代码长而且只适用于set类型



    like查询 %代表一个或多个元素 _只代表一个元素
    如找名字只有连个字的同学
    mysql> select * from student where name like '__';
    +----+------+------+------+
    | id | name | sex  | age  |
    +----+------+------+------+
    |  1 | 小明 | 男   |   14 |
    |  2 | 李雷 | 男   |   14 |
    |  6 | 小明 | 男   |   14 |
    +----+------+------+------+
    找姓李的同学
    mysql> select * from student where name like '李%';
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  2 | 李雷   | 男   |   14 |
    |  7 | 李大锤 | NULL | NULL |
    +----+--------+------+------+
    找姓李且只有两个字的 where name like '李_'; 找名字中有“大”的同学 where name like '%大%';



    查询null数据 要用 is null 语段而不是 '';
    mysql> select * from student where sex is null;
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  7 | 李大锤 | NULL | NULL |
    +----+--------+------+------+
    mysql> select * from student where sex='';
    Empty set (0.00 sec)

    否定判断就 is not null;
    mysql> select * from student where sex is not null;




    if的使用方法  这有点像三元表达式   而且if在mysql中不常用,因为有更方便的php中的if
    mysql> select age,if(age>15,'大','小') from student;
    +------+----------------------+
    | age  | if(age>15,'大','小') |
    +------+----------------------+
    |   14 | 小                   |
    |   14 | 小                   |
    |   16 | 大                   |
    |   14 | 小                   |
    | NULL | 小                   |
    +------+----------------------+



    order by 按照顺序排列 desc是降序排列 asc是升序排列 rand()是随机排列
    mysql> select * from student order by age desc;
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  3 | 韩梅梅 | 女   |   16 |
    |  1 | 小明   | 男   |   14 |
    |  2 | 李雷   | 男   |   14 |
    |  6 | 小明   | 男   |   14 |
    |  7 | 李大锤 | NULL | NULL |
    +----+--------+------+------+
    5 rows in set (0.00 sec)
    升序排列
    mysql> select * from student order by age asc;
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  7 | 李大锤 | NULL | NULL |
    |  1 | 小明   | 男   |   14 |
    |  2 | 李雷   | 男   |   14 |
    |  6 | 小明   | 男   |   14 |
    |  3 | 韩梅梅 | 女   |   16 |
    +----+--------+------+------+
    随机排列
    mysql> select * from student order by rand();
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  3 | 韩梅梅 | 女   |   16 |
    |  7 | 李大锤 | NULL | NULL |
    |  2 | 李雷   | 男   |   14 |
    |  6 | 小明   | 男   |   14 |
    |  1 | 小明   | 男   |   14 |
    +----+--------+------+------+



    limit 1 只截取一条  limit 2,2 从下标为2开始截取两条
    mysql> select * from student limit 1;
    +----+------+------+------+
    | id | name | sex  | age  |
    +----+------+------+------+
    |  1 | 小明 | 男   |   14 |
    +----+------+------+------+
    mysql> select * from student limit 2,2;
    +----+--------+------+------+
    | id | name   | sex  | age  |
    +----+--------+------+------+
    |  3 | 韩梅梅 | 女   |   16 |
    |  6 | 小明   | 男   |   14 |
    +----+--------+------+------+



    查找区间 between 相当于 >= and <=  包括区间在内的范围
    mysql> select * from student student where age between 10 and 14;
    +----+------+------+------+
    | id | name | sex  | age  |
    +----+------+------+------+
    |  1 | 小明 | 男   |   14 |
    |  2 | 李雷 | 男   |   14 |
    |  6 | 小明 | 男   |   14 |
    +----+------+------+------+



    in 相当于 or 的用法 只要满足条件就行
    mysql> select * from student where age in(16,42);
    +----+---------+------+------+
    | id | name    | sex  | age  |
    +----+---------+------+------+
    |  3 | 韩梅梅  | 女   |   16 |
    |  8 | MrJoker | 男   |   42 |
    +----+---------+------+------+



    截取字符串
    从左边截取student表中的名字 从右边截取一个用法 right(name,1)
    mysql> select left(name,1) from student;
    +--------------+
    | left(name,1) |
    +--------------+
    | 小           |
    | 李           |
    | 韩           |
    | 小           |
    | 李           |
    | M            |
    +--------------+
    从中间截取 mid(字段名,从第几个字节开始,截取几个字节)
    mysql> select mid(name,2,1) from student;
    +---------------+
    | mid(name,2,1) |
    +---------------+
    | 明            |
    | 雷            |
    | 梅            |
    | 明            |
    | 大            |
    | r             |
    +---------------+


    显示一个0到1之间的随机数
    select rand();
    显示1到10之间的随机数(先随机再截取第一个数后+1)
    select left(rand()*10,1)+1;

    随机选取一位同学
    mysql> select * from student order by rand() limit 1;
    +----+------+------+------+
    | id | name | sex  | age  |
    +----+------+------+------+
    |  6 | 小明 | 男   |   14 |
    +----+------+------+------+

  • 相关阅读:
    c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变
    C# 一个数组未赋值引发的错误
    c# 2016QQ自动登录程序
    当时钟事件声明为过程变量 让system.threading.timer时钟失效
    if 循环的深入理解 哈希表的一种应用
    VB6对象与地址相互转换
    VB6的函数指针传递
    .net framework 4.0 从 GAC 卸载 程序集
    .net framework 4.0 从 GAC 卸载 程序集
    GAC in CLR 3.0
  • 原文地址:https://www.cnblogs.com/gaofeifiy/p/4916635.html
Copyright © 2020-2023  润新知