首页 > 数据库 >mysql 基础知识

mysql 基础知识

时间:2023-05-17 11:14:34浏览次数:40  
标签:-- SELECT 基础知识 dept emp mysql deptno select

-- _ 在mysql中是表示任一字符,下面查的是名字等于 *Aaaa 的
SELECT * FROM USER WHERE NAME = '_Aaaa';
-- 如果就要查名字是 _Aaaa 的人需要使用转移字符,把_当成普通字符
SELECT * FROM USER WHERE NAME = '\_Aaaa';
-- 或者自定义字符
SELECT * FROM USER WHERE NAME = '$_Aaaa' ESCAPE '$';
SELECT NAME, AGE aage	-- 3,过滤字段,起别名(这个步骤之后才能使用别名)
FROM USER 				-- 1,mysql 查询时先查这个表的所有字段
WHERE AGE > 12 			-- 2,过滤 age > 12
ORDER BY aage DESC 		-- 4,根据 AGE(aage) 排序

数据定义语言分类

类型 解释 备注
DDL 数据定义语言 创建修改库、表、视图、索引、约束等
CREATE、DROP、ALTER 等
DML 数据操作语言 数据行的增删改
INSERT 、 DELETE 、 UPDATE 等
DQL 数据查询语言 SELECT 语句
DCL 数据控制语言 安全控制,比如创建用户,给用户分配权限,回滚数据等
GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等

别名

-- USER_AGE 指定别名,要不要 AS 都行
SELECT USER_AGE AS AGE FROM USER;
-- 对运算结果起别名要加双引号
SELECT USER_AGE+10 "AGE" FROM USER;

去重

使用 DISTINCT,只能对行去重

运算符

符号 解释 备注
算术运算符 +-*/%
=<>>=<=
<==> 安全等于 = 的区别是可以和 null 做对比
效果和 IS NULL 相同
<> 不等于 != 没区别,不能和 null 做对比
IS NULLISNULL 为空运算符
IS NOT NULL 不为空运算符
LEAST 最小值运算符 SELECT LEAST(1,2,3)
GREATEST 最大值运算符
BETWEEN...AND... 范围运算符 包含临界值
IN 属于运算符
NOT IN 不属于运算符
LIKE 模糊匹配
REGEXP 正则运算符
RLIKE 判断正则是否合法
-- _ 在mysql中是表示任一字符,下面查的是名字等于 *Aaaa 的
SELECT * FROM USER WHERE NAME = '_Aaaa';
-- 如果就要查名字是 _Aaaa 的人需要使用转移字符,把_当成普通字符
SELECT * FROM USER WHERE NAME = '\_Aaaa';
-- 或者自定义字符
SELECT * FROM USER WHERE NAME = '$_Aaaa' ESCAPE '$';

排序和分页

ASC:顺序;DESC:倒叙

多列排序:先以第一个字段排序,然后根据排序的结果再次以第二个字段排序

分页:LIMIT [偏移量] 行数,偏移量公式:(pageNum-1)*pageSize。limit 2,10 从下标2开始,查10条

  • select...where … group by … having … order by … limit
  • GROUP BY 中的字段必须在 SELECT 中

连接查询

联表查询,分为两个版本:sql92 和 sql95。支持的查询方式有内连接,外连接(左右外连接),全连接(MySql 不支持标准的语法,但是有提代方案)

  • 内连接:取交集,关联字段的值在主表和从表中都有的才保留
-- sql92(用逗号关联表)
select * from emp,dept where emp.deptno=dept.deptno
-- sql99(inner join 等价于 join)
select * from emp innner join dept on emp.deptno=dept.deptno
  • 外连接:取并集,以主表为准,从表中不匹配的数据用 null 代替。MySql 不支持 sql92 外连接,也不支持 sql95 全外连接,即 MySql 只支持 sql95 的左右外连接
-- sql92 左外连接(左表为主,右边不够的补null,所以右表用+号标识)--- Mysql 不支持
select * from emp, dept where emp.deptno=dept.depetno(+)
-- sql95 左外连接(left outer join 等价于 left join)
select * from emp left outer join dept on emp.deptno=dept.deptno

-- sql92 全外连接 --- Mysql 不支持
select * from emp,dept where epm.deptno(+) = dept.dpetno(+)
-- sql95 全外连接 --- Mysql 不支持
select * from emp full outer join dept on emp.deptno=dept.deptno;
  • 联合查询:UNION,UNION ALL
    • 要联合的结果集必须一样(个数,顺序,类型),不一样也能出结果但是不准确,也不是我们预期的结果
    • UNION 会去重,UNION ALL 不会去重(意味着效率会高于 UNION)
    • MySQL 不支持 sql95 全外连接(不支持FULL JOIN),可以使用联合查询代替
  • 自然连接 和 USING(sql99新特性)
-- sql95 内连接
select * from emp innner join dept on emp.deptno=dept.deptno;
-- sql99 自然连接(效果和上面一致,自动根据两个表相同的字段去关联,不用显示指定字段)
select * from emp NATURAL join dept;
-- sql99 USING 指定字段(效果和上面一样,不用 ON 指定字段,使用 USING)
select * from emp NATURAL join dept USING(dept_code);

子查询

  • 单行子查询(单字段):子查询的结果集只有一行数据,主表和子表的某个字段值相等
-- student 表的 u_id 和 user 表的 id 相等
SELECT * FROM user WHERE ID = (
    				SELECT u_id FROM student WHERE ID = 123
				);
  • 单行子查询(多字段):子查询的结果集只有一行数据,主表和子表的多个字段值相等
-- sku.item_id 等于 spu.id,并且 sku.code = spu.code
select * from spu where (id,`code`) = (
                                        select item_id, code from sku
                                        where item_id = 1300949751678957570 and code = 'test02'
                                   	);
  • 多行子查询(多字段):主表和子表都能是多行数据(单字段直接用 in 来匹配)
-- user 表和 stu表中 code 和 name 相等的
select * from user u where EXISTS (
                                   -- 这里 select 什么不重要
                                   -- 只要能匹配上,user表中的记录就保留,跟子查询没关系
                                   select 1
                                   from stu s 
                                   where u.code = s.code and u.name = s.name
                                   );

标签:--,SELECT,基础知识,dept,emp,mysql,deptno,select
From: https://www.cnblogs.com/hangychn/p/17407932.html

相关文章

  • 一个好用的命令行mysql客户端 mycli
    官网:https://www.mycli.net/支持自动补全,高亮提示,非常好用;查看表结构\dtsys_menu;有点遗憾的是没有展示注释信息,不可也可以用其它语句查看:showfullcolumnsfromsys_menu;showcreatetablesys_menu;查询结果导出\Tcsv;\o~/export.csv;SELECT*FROMt_t......
  • MySQL触发器Trigger加载以及目前局限
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:亮文章来源:GreatSQL社区原创概念介绍首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式MySQL中单个trigger仅支持单事件触发即单......
  • MYSQL因IN的范围太大导致索引失效问题
    背景最近发现有个用于统计的门店串码激活数量的SQL特别慢,将其摘出来大致如下SELECTa.sku_idasskuId,a.store_idasstoreId,count(*)assaleQtyFROMall_imei_infoawherea.activated_time>=1675530000000anda.activated_time<=1675616399999anda.stor......
  • mysql从5.7升级到8.0的注意事项
    ####################################(1)sql_mode全局变量:在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER(2)mysql_native_password插件:MySQL8.0.4开始,默认身份认证开始改变......
  • Oracle版面本的MySQL8.0的配置文件 my.cnf
    ##############################创建用户和用户组:groupaddworkuseraddwork  准备目录:mkdir-p/home/work/mysql_3306mkdir-p/home/work/mysql_3306/datamkdir-p/home/work/mysql_3306/etcmkdir-p/home/work/mysql_3306/tmpmkdir-p/home/work/mysql_3306/logmkd......
  • Windows安装、配置、卸载MySQL教程
    MySQL是一个关系型数据库管理系统,目前为Oracle旗下产品,它具有开源、体积小、速度快的优点,许多网站使用的都是MySQL数据库。简单而言,MySQL数据库核心功能就是用来存储数据的。MySQL数据库分为社区版和商业版,这里介绍的是社区版的安装教程一、下载MySQL打开MySQL官网下载链......
  • mysql update语法 竟然不支持limit区间限制
    首先查询可以这样写,没毛病的SELECT*fromaLIMIT1000,2000 1.然后看一个不是区间的limit,更新满足条件的前1000条,没问题updateaseta.imp_date=4wherea.is_sync=0limit10002.这样写是错误的updateaseta.imp_date=4wherea.is_sync=0limit1001,2000......
  • .Net 5 CanalSharp Mysql CDC (增量同步,捕获变更数据)Docker 系列之 Canal (CDC 增量
    CanalSharp阿里云的解决方案,需要两部分Canal 服务端要和Mysql连在一起(目前我是用docker部署的服务)另外一部分就是CanalSharp单独的客户端服务(.Net5服务)CanalSharp文档可以参考:https://canalsharp.azurewebsites.net/zh/安装服务,可以点击下边的连接。Docker系列之Canal......
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
    之前业务需要捕捉到业务数据增量部分,并对其进行宽表处理,这也是其中的一个技术方案,方案主要是用了CDC的技术。CDC全称是ChangeDataCapture,捕获变更数据,是一个比较广泛的概念,只要是能够捕获所有数据的变化,比如数据库捕获完整的变更日志记录增、删、改等,都可以称为CDC。该功能被......
  • MySQL数据基础知识整理—1
     MySQL数据库在学习之前,我们要了解什么是MySQL数据库?MySQL数据库是一个开源的关系型数据库管理系统,我们可以使用SQL(StructuredQueryLanguage)作为开发语言,对数据进行操作,并且,该数据库支持多用户,多线程,多种存储引擎,因此被广泛的应用于Web开发中。    简单来说,MySQL数据库就......