MYSQL中的查询

本文详细介绍了数据库查询中的联查(包括一对一,一对多,多对多的关联及内连接、外连接),联合查询(union与union all的区别)以及子查询的用法。同时,探讨了函数的使用,如字符串、数学和日期函数,并举例说明。此外,还概述了数据库设计的基本流程和三范式。内容深入浅出,适合数据库初学者和开发者参考。
摘要由CSDN通过智能技术生成

多表联查:

一对一,一对多,多对多时要用第三张表关联

合并结果集(联合查询)

联合查询是将多个表的查询结果,纵向拼接后展现

语法格式:

select * from 表1名
union
select * from 表2名
-- ===========================================
/*
union 会将完全一致的数据去重
union all 会将所有数据保留
合并的两表的列数,数据类型都要一致
ps:一般用在将一个大表拆成两个表
*/

连接查询:

连接查询是将多个表的查询 结果,横向拼接后展现。

连接查询又分为:内连接和外连接

内连接语法格式:

-- 标准写法
select * from 表1名 inner join 表2名 on 表1名.列 = 表2名.列;
-- 简化的写法:
select * from 表1名,表2名 where 表1名.列 = 表2名.列;
/*
on 后面跟的是关联的条件.内连接只会保留完全符合关联条件的数据
*/

外连接语法格式:

又分为左外连接和右外连接。左外保留左表中不符合条件的数据,右外保留右表中不符合条件的数据

select * from 表1名 left outer join 表2名   表1名.列 = 表2名.列;
select * from 表1名 right outer join 表2名  表1名.列 = 表2名.列;
/*
所谓的左右就是这个语句的左右
*/

子查询:(subquery)

子查询其实就是在一个表中嵌套查询,它可以嵌套在where后面当条件,也可以嵌套在from后面当表。

在where后面当条件的语法格式:

select * from 表名 where 列1名 =(select 列1名 from 表名 where 列2名 = 条件);
select * from 表名 where 列1名 in (select 列1名 from 表名 where 列2名 = 条件);
/*
注意:子查询当条件时,如果返回的结果是一个话,条件可以使用 = > < 等等
      如果返回的结果是多个时,条件用in
 */

函数:

函数分为:字符串函数、数学函数、日期函数

字符串函数:

函数说明结果
charset(str)返回指定的字符串的字符集字符串的字符集
concat()将多个字符串连接乘一个字符串,连接符用 ' '包起来(分隔符不能为null)字符串
inset(sting,substring)返回substring在string中出现的位置,没有返回0判断存不存在
Ucase()转换成大写
Lcase()转换成小写
left(string ,length)从string中的 左边起去length个字符就是截取
length(string)字符串的长度int类型的数据
replace(str,string,string1)用string1替换在str中的string替换
strcmp(str1,str2)逐字比较两个字符串大小
substring(str,position[length])在str中截取从position开始,的length个字符截取
lirim(str) rtrim(str1) trim去掉前端空格或后端空格去空格

注意:where 后面不能跟聚合函数,但是能跟普通函数。

数学函数:

函数说明
abs()绝对值
bin(decimal_number)十进制转二进制
ceiling()向上取整
conv(num,from_base,to_base)进制转换
floor()向下取整
format(num,decimal_places)保留这个数小数的位数
hex(DecimalNumber)转十六进制
least()求最小值
mod()求余
rand(seed)随机数,seed是种子,可不写,如果seed赋值了就固定了随机数
round()四舍五入
truncate(x,d)将 x 数值保留d位小数(截断)

日期函数:

函数说明
sysdate()获取当前系统时间
now()获取当前系统时间
addtime(date,time_interval)将一个时间加到date中
date_add(date,interval d_value d_type)将一个时间加到date中
date_sub(date,interval d_value d_type)将一个时间在date中减去
datediff(date1,date2)两个时间差
current_date()当前日期(年月日)
current_time()当前时间(时分秒)
current_timestamp()当前时间戳(年月日时分秒)
date(datetime)返回达特time的日期部分
year | month | date()年 | 月 | 日

字符和日期的互转:

  • 日期格式化字符串 date_format(date,'%Y-%m-%d')

  • 字符串解析为日期 str_to_date(date,'%Y-%m-%d')

格式化符号:

%Y:代表4位的年份
  %y:代表2位的年份
  %m:代表月, 格式为(01……12)
  %c:代表月, 格式为(1……12)
  %d:代表月份中的天数,格式为(00……31)
  %e:代表月份中的天数, 格式为(0……31)
  %H:代表小时,格式为(00……23)
  %k:代表 小时,格式为(0……23)
  %h: 代表小时,格式为(01……12)
  %I: 代表小时,格式为(01……12)
  %l :代表小时,格式为(1……12)
  %i: 代表分钟, 格式为(00……59)
  %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
  %T:代表 时间,格式为24 小时(hh:mm:ss)
  %S:代表 秒,格式为(00……59)
  %s:代表 秒,格式为(00……59)

流程控制函数:

函数说明
if(expr1,expr2,expr3)如果expr1为真,则返回expr2,否则返回expr3
ifnull(expr1,expr2)如果expr1不是null,则返回expr1,否则返回expr2.用来替换null,null不能参加运算
case when [expr] then[result] else[default] end如果expr是真,返回result,否则返回default。--------------------------expr
case[value] when [value1] then[result] else[default] end如果value等于value1,返回result,否则返回default。------------------- result结果

数据库设计:

数据库设计流程:

1.根据应用系统的功能,分析数据实体 (实体,就是要存储的数据对象)

2.提取实体的数据项(数据项,就是实体的属性)

3.根据数据库设计三范式规范视图的数据项

4.绘制E-R图 (实体关系图,直观的展示实体与实体之间的关系)

​ 矩形代表实体 椭圆形代表属性 菱形代表关系 实线关联

5.数据库建模

​ ○ 三线图进行数据表设计

​ ○ PowerDesigner

​ ○ PDManer

6.建库建表 编写SQL指令创建数据库、数据表

​ 添加测试数据,SQL测试

数据库设计的三范式:

第一范式:要求数据表中的字段(列)不可再分

如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第二范式:不存在非关键字段对关键字段的部分依赖

在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

第三范式:不存在非关键字段之间的传递依赖

确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值