一、单表查询
- 查询特定字段
语法:
select <字段1,字段2,…> from <表名>;
示例:查询会员表里所有用户的手机号码和用户类型
select phone, type from t_user;
- 查询所有字段
语法:
select * from <表名>;
示例:查询会员表的所有用户信息
select * from t_user;
- 按条件查询,多个条件需要同时成立
语法:
select … from <表名> where 表达式A and 表达式B and … and 表达式N;
示例:查询会员表中类型为物业、且注册时间大于2021年4月21日
select * from t_user where type=3 and reg_time > '2021-04-21';
- 按条件查询,多个条件不需要同时成立,只需满足其中一个或多个
语法:
select … from 表名 where 字段a = 值a or 字段b=值b or 字段c=值c;
示例:查询会员表里用户id为1或者2或用户名为Nick 的用户信息
select * from t_user where id=1 or id=2 or user_name='nick ';
二、多表查询
语法:
select 要查询的字段 from 表1,表2 … where 关联条件和过滤条件
示例:查询id为12的用户的用户名、手机号码、创建时间以及该用户的商户编号、商户名称、成立日期
分析:
审题查询字段/筛选字段来自几张表:用户名、手机号码、创建时间(t_user) ,商户编号、商户名称、成立日期(t_merchant)
关联关系:t_user.id = t_merchant.user_id
过滤条件:t_user.id = 12
select t_user.user_name,t_user.phone,t_user.reg_time,t_merchant.merchant_id,t_merchant.merchant_name,t_merchant.establish_date from t_user,t_merchant where t_user.id = t_merchant.user_id and t_user.id =12;
使用别名,别名用 as 或者 空格 表示
select u.user_name,u.phone,u.reg_time,m.merchant_id,m.merchant_name,m.establish_date from t_user as u ,t_merchant as m where u.id = m.user_id and u.id =12;
select u.user_name,u.phone,u.reg_time,m.merchant_id,m.merchant_name,m.establish_date from t_user u ,t_merchant m where u.id = m.user_id and u.id =12;
select u.user_name,u.phone,u.reg_time,m.merchant_id,m.merchant_name,m.establish_date '成立日期' from t_user u ,t_merchant m where u.id = m.user_id and u.id =12;
三、连接查询
语法 | ||
---|---|---|
INNER JOIN | 内连接 | 又称为等值连接,获取两个表中字段匹配关系的记录 |
LEFT JOIN | 左连接 | 读取左表全部数据,即使右表没有关联数据,左连接会从左表产生一套完整的记录,和右表匹配的记录。如果右边没有匹配记录,则右侧结果集字段为null |
RIGHT JOIN | 右连接 | 以右表为基础,与LEFT JOIN 相反 |
案例:
用户信息表user
用户对象信息表user_lover
1.内连接:inner join … on
select * from user inner join user_lover on user.id = user_lover.u_id;
2.左连接: left join … on
select * from user left join user_lover on user.id = user_lover.u_id;
- 右连接:right join … on
select * from user left join user_lover on user.id = user_lover.u_id;