mysql从第2条开始查询_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 test\G;

*************************** 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 |

+----+------+------+------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值