【MySql】3.Select查询操作

where 是全等查询
on 是模糊查询

1、简单查询

-- 查询所有
SELECT * from js_user;

-- 查询指定的字段
select id,name,sex from js_user;

-- 别名 as
SELECT id as 编号,name as 姓名 from js_user;
-- 别名可以用来计算
-- id+1 as 自增后的id

-- 拼接字符串 concat()
select CONCAT("姓名:",name) as 新名字 from js_user;

-- 去重 DISTINCT
SELECT DISTINCT name FROM js_user;

示例

mysql> select CONCAT("姓名:",name) as 新名字 from js_user;
+-------------+
| 新名字      |
+-------------+
| 姓名:xiao  |
| 姓名:zhong |
| 姓名:da    |
+-------------+
3 rows in set
mysql> SELECT id+1 as 自增后的id,name as 姓名 from js_user;
+------------+-------+
| 自增后的id | 姓名  |
+------------+-------+
|          2 | xiao  |
|          3 | zhong |
|          4 | da    |
+------------+-------+
3 rows in set

2、模糊查询

运算符语法描述
is nulla is null操作符为null 返回真
is not nulla is not null操作符不为null 返回真
betweenbetween a and b若在 [a,b]之间 返回真
likea lick b匹配,a【匹配b 则结果为真
ina in (a1,a2,a3…)假设 a 在 a1 a2 。。中的某一值为真
-- like结合 %(代表任意个字符) _(一个字符)
-- 查询两个字的 姓刘的
select * from js_user where name like '刘_';
-- 查询所有姓刘的
select * from js_user where name like '刘%';
-- 查询名字中带有在 国字的
select * from js_user where NAME LIKE '%国%';
-- in 是一个具体的值
 select * from js_user where address in ('天津','上海','北京');

例子

mysql> select * from js_user where NAME LIKE '%国%';
+----+----------+--------+-----+---------+--------------+---------+
| id | name     | pwd    | sex | address | telephone    | gradeid |
+----+----------+--------+-----+---------+--------------+---------+
|  4 | 刘国梁   | 123456 || 北京    | 18863		 |       4 |
|  6 | 欧阳国一 | 123456 || NULL    | NULL         |       4 |
|  7 | 杨国忠   | 123456 || NULL    | NULL         |       3 |
+----+----------+--------+-----+---------+--------------+---------+
3 rows in set

3、联表查询

操作描述
iner join 内连接 或等值连接如果表中有一个值匹配上 就返回行
left join 左连接会从左表中返回结果 即使右表中没有匹配
right join 右连接会从右表中返回数据 即使左表中没有匹配

7种JOIN图

思路
/*
1、明确要查询的数据 来自哪些数据表
2、确定使用哪种查询?
3、找到各个表相同的部分 确定判断条件
*/
  • 两个表

    select u.id,name,subject,score from js_user as u INNER JOIN js_sub as s on  s.id = u.id;
    
    mysql> select u.id,name,subject,score from js_user as u INNER JOIN js_sub as s on  s.id = u.id;
    +----+------+----------+-------+
    | id | name | subject  | score |
    +----+------+----------+-------+
    |  1 | 刘翔 | 离散数学 |    90 |
    |  1 | 刘翔 | 高等数学 |    89 |
    |  1 | 刘翔 | 线性代数 |    86 |
    |  2 | 姚明 | 离散数学 |    93 |
    |  2 | 姚明 | 高等数学 |    94 |
    |  2 | 姚明 | 线性代数 |    89 |
    |  3 | 马龙 | 离散数学 |    90 |
    |  3 | 马龙 | 高等数学 |    93 |
    |  3 | 马龙 | 线性代数 |    96 |
    +----+------+----------+-------+
    9 rows in set
    
  • 三个表

    -- 查询学生的基本信息和考试情况
    select u.id,gradename,name,subject,score from js_user as u 
    INNER JOIN js_sub as s 
    on  s.id = u.id 
    LEFT JOIN grade as g 
    on  g.gradeid = u.gradeid;
    
    mysql> select u.id,gradename,name,subject,score from js_user as u INNER JOIN js_sub as s on  s.id = u.id LEFT JOIN grade as g on  g.gradeid = u.gradeid;
    +----+-----------+------+----------+-------+
    | id | gradename | name | subject  | score |
    +----+-----------+------+----------+-------+
    |  1 | 研二      | 刘翔 | 离散数学 |    90 |
    |  1 | 研二      | 刘翔 | 高等数学 |    89 |
    |  1 | 研二      | 刘翔 | 线性代数 |    86 |
    |  2 | 大三      | 姚明 | 离散数学 |    93 |
    |  2 | 大三      | 姚明 | 高等数学 |    94 |
    |  2 | 大三      | 姚明 | 线性代数 |    89 |
    |  3 | 大二      | 马龙 | 离散数学 |    90 |
    |  3 | 大二      | 马龙 | 高等数学 |    93 |
    |  3 | 大二      | 马龙 | 线性代数 |    96 |
    +----+-----------+------+----------+-------+
    9 rows in set
    
    多个表一起的时候
    • 先做两个的
    • 一一分解即可。

4、自查询

  • 样例表
mysql> select * from js_cate;
+------+---------+------------+
| p_id | cate_id | sub_name   |
+------+---------+------------+
|    0 |       3 | 数学       |
|    3 |       9 | 高等数学   |
|    3 |       2 | 线性代数   |
|    0 |       6 | 物理学     |
|    6 |       4 | 量子力学   |
|    6 |       5 | 热力学     |
|    0 |       7 | 计算机科学 |
|    7 |       1 | 操作系统   |
|    7 |       8 | 数据结构   |
+------+---------+------------+
9 rows in set
--  父子关系
select p.sub_name as 父栏目, s.sub_name as 子栏目 from js_cate as p, js_cate as s where p.cate_id=s.p_id;

+------------+----------+
| 父栏目     | 子栏目   |
+------------+----------+
| 数学       | 高等数学 |
| 数学       | 线性代数 |
| 物理学     | 量子力学 |
| 物理学     | 热力学   |
| 计算机科学 | 操作系统 |
| 计算机科学 | 数据结构 |
+------------+----------+
6 rows in set
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值