【MySql】3.Select查询操作

本文介绍了SQL查询的基本操作,包括全等查询(如WHERE id=)和模糊查询(LIKE, BETWEEN, IN),以及内连接、左连接和右连接的联表查询实例。自查询通过父子关系展示了如何在多表中进行层次结构查询。
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
eggjs 中使用 this.app.mysql.select 进行模糊查询的方法可以按照以下步骤进行: 1. 首先,在 Egg.js 项目的 config/config.default.js 文件中配置数据库连接信息。例如,配置一个名为 `mysql` 的数据库连接: ```javascript config.mysql = { // 这里是数据库的连接配置 client: { host: 'localhost', port: '3306', user: 'your_username', password: 'your_password', database: 'your_database', }, // 是否加载到 app 上,默认开启 app: true, // 是否加载到 agent 上,默认关闭 agent: false, }; ``` 2. 在需要进行模糊查询的方法或路由中,可以通过 this.app.mysql.select 方法来执行查询操作。 ```javascript async fuzzyQuery() { const keyword = this.ctx.query.keyword; // 获取查询关键字,假设在请求的 query 参数中传入 keyword const sql = "SELECT * FROM table_name WHERE name LIKE ?"; const rows = await this.app.mysql.query(sql, [`%${keyword}%`]); // 使用 this.app.mysql.query 方法执行查询 // 对查询结果进行处理 // ... // 返回查询结果 this.ctx.body = rows; } ``` 以上代码示例中,通过使用 `LIKE` 关键字进行模糊查询,并将 `%` 字符串连接到关键字的前后,以实现模糊匹配的效果。查询结果可以根据实际需求进行处理,并通过 `this.ctx.body` 返回给前端。 总结:使用 Egg.js 中的 this.app.mysql.select 方法进行模糊查询,需要先配置数据库连接信息,在需要查询的方法中使用 this.app.mysql.query 方法执行查询操作,并结合 `LIKE` 关键字和 `%` 字符串进行模糊匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值