MySQL数据库:SQL语言入门 【上】(学习笔记)

SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。(95%适用于所有关系型数据库) 【 SQL是关系型数据库通用的操作语言】

在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”。

SQL语言具有集数据查询、数据操纵、数据定义和数据控制功能于一体,类似自然语言、简单易用以及非过程化等特点,

数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,

(分页查询语句不同)
MySQL:  limit ?, ?
orcale: top 5 where 

  • 介绍MySQL数据库

mysql是一款开放源码,轻量级的关系型数据库
具有体积小,数据快,成本低,开放源码等特点
使用sql语言对数据库进行管理


一,SQL语言组成部分(5)

DQL* 数据的查询语言:查询语句的6个组成部分

DML* 数据的操作语言:insert delete update  

DDL 数据的定义语言:(了解)创建/删除/修改 数据库对象

DCL 数据的控制语言:(了解)授予,撤回 

TCL* 事务的控制语言:提交,回滚  

1,DQL —— 数据查询语言(Data Query Language)

           主要用于数据的查询,其基本结构是使用 select 子句,from 子句和 where 子句的组合来查询一条或多条数据。

(1)组成结构

select  字段名,字段名,字段名,

from  表名,表名,表名

where  条件  and/or 条件 and/or 条件 ———— 【分组前条件判断】

group by  字段名,字段名,字段名————【分组】

having  条件  and/or  条件  and/or  字段名————【分组后条件判断】

order  by 字段名,字段名,字段名————【排序】

【select 语句的执行顺序】
from--where -- group  by–  select   -  having-   order  by

(2)单表查询

【1】介绍 select 部分

===查指定的部位(与表内数据的顺序不关)

 select ename,empno from emp

===查表内全部数据 

 select * from emp

===别名——as

      ----- 真实案例 :实体类 属性名写错了;   多表查询的时候

           ---改名--》deptno改成eptno

select empno,ename,job,deptno as eptno from emp

      ----- 真实案例 开发组 每周会议

           ---写别名  as可以省略

           --- '  '  可加可不加,如果别名类里面有特殊符号或者空格  必须用!!!

select empno 员工编号,ename 员工姓名,job 岗位名称,deptno as '部门编号' from emp
===简单的算术运算

       ----- 查询表里所有员工的年薪是多少?  (忽视了奖金,流程函数处补全)

              ---空值做任何运算结果都为空!!!

select sal*12 年薪,ename,comm from emp
===去重操作   

去重关键字  distinct

       ----- 查询员工都在哪几个部门工作?

select distinct deptno from emp 
select distinct job,deptno from emp; -- 对后面的所有列组合 去重 ,而不是单独的某一列去重
===介绍 order by

默认情况下是按照升序排列的

 asc---升序 (可以默认不写)
desc---降序

select * from emp order by sal; -- 默认情况下是按照升序排列的
select * from emp order by sal asc; -- asc 升序,可以默认不写
select * from emp order by sal desc; -- desc 降序
select * from emp order by sal asc ,deptno desc; -- 在工资升序的情况下,deptno按照降序排列select deptno,count(*) num
from emp
where year(hiredate)=1981
GROUP BY deptno        
order by num,deptno desc

【2】介绍  where  部分

将过滤条件放在where子句的后面,可以筛选/过滤出我们想要的符合条件的数据:

===关系运算符 

= , > ,<  ,>= ,<= ,!= ,<>  (最后两个都是  不等于)

      -----查询入职时间在1981年的所有员工信息

 select * from emp where hiredate>='1981-1-1' and hiredate<='1981-12-31'

      -----查寻部门编号不是30的所有员工信息

select * from emp where deptno!=30

      -----查询工资范围在1000--2000的所有员工信息

select * from emp where sal>1000 and sal<2000

      -----查询经理编号是7321的所有员工信息

select * from emp where mgr=7321
===逻辑运算符   

and  &&     or  | |        in———替换 or

      -----查寻部门编号是10或者20的所有员工信息  

select * from emp where deptno=10 or deptno=20
select * from emp where deptno in (10,20)
===空值判断

       ..... where is null    ————为空
       ..... where is not null ————不为空

      -----查询没有奖金的所有员工信息

select * from emp where comm is null 
===模糊查询     

% :0~n位任意字符    ;   _  :1位任意字符

       ----- 查询名字第三位是a的

 select * from emp where ename like '__a%'

       ----- 查询员工姓名里以A开头的员工信息

select * from emp where ename like 'A%'

       ----- 查询岗位名称里,带A或者带C的员工信息

select * from emp where job like '%A%' or '%C%'

       ----- 查询 没有奖金,不是20号部门 ,名字里没有A的员工信息

select * from emp where comm is null and deptno!=30 and ename not like '%A%'
===小括号的使用

因为不同的运算符的优先级别不同,加括号为了可读性

select * from emp where job = 'SALESMAN' or job = 'CLERK' and sal >=1500; -- 先and再or  and > or
select * from emp where job = 'SALESMAN' or (job = 'CLERK' and sal >=1500); 
select * from emp where (job = 'SALESMAN' or job = 'CLERK') and sal >=1500;
【3】函数
  • 函数只是对查询结果中的数据进行处理,不会改变数据库中数据表的值。
  • 使用函数可以大大提高SELECT语句操作数据库的能力,同时也给数据的转换和处理提供了方便。 (在sql中使用函数)
  • 函数的功能:封装了特定的一些功能,我们直接拿过来使用,可以实现对应的功能
  • 函数作用:为了提高select的能力
===分类:   

    单行函数  (进去一条数据,出来一条数据)

    多行函数/分组函数/聚合函数(进去一组数据,出来一条数据)

  • 除了多行函数(max,min,count,sum,avg),都是单行函数
===单行函数
      ----- 字符串函数

              拼接:concat(str1,str2,。。。strn)

                       ---查询所有  部门编号员工编号员工姓名  的员工信息

select concat(deptno,'_',empno,'_',ename) from emp  

             添加:insert(str,index,n,newstr)

                       ---查询所有 长春吉软_员工姓名 的员工信息

select ename,insert(ename,1,0,'长春吉软_') from emp

             总长度:length(str)

                       ---查询所有 员工姓名长度 大于5位的

select * from emp where length(ename)>5
-- 仅查询了 字节数和员工姓名
select length(ename),ename from emp where length(ename)>5

             替换:replace(str,oldstr,newstr)

              获取:substring(str,index,n)

                       ---查询所有  员工姓名(保留第一位和最后一位字母,中间用。。。代替)

 SELECT REPLACE(ename,substring(ename,2,length(ename)-2),'...') FROM emp
-- 拼接和获取
SELECT CONCAT(substring(ename,1,1),'...',substring(ename,length(ename),1)) FROM emp;
字符串函数
函数  描述 
concat(str1,str2,···strn) 将str1、str2···strn拼接成一个新的字符串 
insert(str,index,n,newstr) 将字符串str从第index位置开始的n个字符替换成字符串newstr  
length(str)获取字符串str的长度  
lower(str)  将字符串str中的每个字符转换为小写  
  upper(str)将字符串str中的每个字符转换为大写  
left(str, n)   获取字符串str最左边的n个字符  
 right(str, n) 获取字符串str最右边的n个字符  
lpad(str, n,  pad)   使用字符串pad在str的最左边进行填充,直到长度为n个字符为止  
rpad(str, n,  pad 使用字符串pad在str的最右边进行填充,直到长度为n个字符为止  
 ltrim(str) 去除字符串str左侧的空格  
 rtrim(str)  去除字符串str右侧的空格  
 trim(str)  去除字符串str左右两侧的空格
replace(str,oldstr,newstr)  用字符串newstr替换字符串str中所有的子字符串oldstr  
reverse(str) 将字符串str中的字符逆序  
strcmp(str1, str2)  比较字符串str1和str2的大小  
substring(str,index,n)获取从字符串str的index位置开始的n个字符  
数值函数
函数  描述  
  ABS(num)   返回num的绝对值  
 CEIL(num)  返回大于num的最小整数(向上取整)  
  FLOOR(num)   返回小于num的最大整数(向下取整)  
 MOD(num1, num2)   返回num1/num2的余数(取模)  
  PI()   返回圆周率的值  

POW(num,n)

POWER(num, n)  

返回num的n次方 
  RAND(num)返回0~1之间的随机数  
 ROUND(num, n)  返回x四舍五入后的值,该值保留到小数点后n位 
TRUNCATE(num, n) 返回num被舍去至小数点后n位的值 

      ----- 日期时间函数

dual ---虚拟表

       ----- 房租一个月后到期,问到期时间?

select ADDDATE(NOW(),INTERVAL 1 MONTH) from dual

       ----- 查询所有员工试用期通过的时间

select  ename,ADDDATE(hiredate,INTERVAL 3 MONTH) from emp

       ----- 查询所有员工里工龄超过20年的所有员工

select * from emp where (DATEDIFF(NOW(),hiredate)/365)>20
select * from EMP WHERE SUBDATE(Now(), INTERVAL 20 YEAR) > hiredate  -- 减
select * from emp where adddate(hiredate,interval 20 year)<now()   -- 加

       ----- 查询所有员工,在1981年9月份入职的所有员工

select * from emp where year(hiredate) = 1981 and month(hiredate) = 9

       -----查询入职时间超100天的所有员工

select DATEDIFF(NOW(),hiredate) from emp where DATEDIFF(NOW(),hiredate)>100

                                        时间与日期函数 

      ----- 流程函数

             ----- 查询表里所有员工的年薪是多少?

select sal*12+ IFNULL(comm,0) 年薪 from emp

              ----- 查询所有员工编号,姓名,以及所在的部门名称(单表查询)

select empno,ename, 
case deptno when 10 then '开发部'when 20 then '测试部'when 30 then '运维部'when 40 then '实施部'else '最后' end 部门名称 from emp

                                                       流程函数 

 

===多行函数/分组函数/聚合函数

 max()—最大值 ;min()—最小值 ;avg()—平均值 ;sum()—求和 ;count()—求个数 ;

select max(sal),min(sal),avg(sal),sum(sal),count(sal) from emp
      ----- 介绍 group by 和 having 

             ----- 查询每个部门里 的最大工资,最小工资,平均工资

select max(sal),min(sal),avg(sal) 
from emp 
group by deptno

             ----- 查询 每个岗位的最高工资,最低工资,平均工资

select job,max(sal),min(sal),avg(sal) 
from emp
GROUP BY job

             ----- 查询 1000元以上的每个工资的总人数,总人数低于5个的部门不显示

select deptno,count(*) c
from emp 
where sal>1000 
GROUP BY deptno 
having c>=5

             ----- 查询 每个经理人所带的手下员工的总人数

select mgr,count(*)
from emp
GROUP BY mgr

             ----- 查询 在1981年入职的各部门总人数

select deptno,count(*)
from emp
where year(hiredate)=1981
GROUP BY deptno

                                                        其他函数

      

(3)多表查询

===分类

   内连接查询,外连接查询

-- from部分
select * from emp,dept (缺少关联关系)    造成--笛卡尔积现象   15*3=45

===内连接查询
       ----- 【写法一】 
select * from emp,dept where emp.deptno=dept.deptno 
        ----- inner join  . . . on    【写法二】     

    inner join —— 内连接  ; on —— 通过on做两张表之间的关联查询

select * from emp inner join dept on emp.deptno=dept.deptno 
        ----- 关键字  using        【写法三】

     要求:两张表之间的关联列是同名的

select * from emp inner join dept using(deptno)  
        ----- 自然连接               【写法四】 

      要求:两张表之间的关联列 同名,同类型,同长度

select * from emp e natural join dept d 
        ----- 自身内连接 (一张表)

             ----- 例子:查找每个经理的名字,入职时间,和工资

select distinct m.empno,m.ename,m.hiredate 
from emp m,emp e
where m.empno=e.mgr
===外连接查询

左外连接   右外连接

    ——区分原理:一个查询的SQL语句里,第一个表名 叫 左表;第二个表名叫 右表。

                              如果是内连接查询,左右两个表的地位是一样的

select * from t_emp,dept where dept.deptno=t_emp.deptno 

                               如果使用左外连接查询,那么左表是主表,主表里的数据都会显示出来;右表是子表,子表里的数据,只显示符合连接条件的。

select * from t_emp left join dept on dept.deptno=t_emp.deptno-- 右表做主表
select * from t_emp right join dept on dept.deptno=t_emp.deptno

(4)子查询

{没有子查询,可能要执行很多次,才能得到最终结果  ;有子查询,执行一次就能拿到最终结果}

===分类

不相关子查询(简单)  ——单行不相关子查询

                                       ——多行不相关子查询

相关子查询  ----》存储过程

        ----- 单行不相关子查询

              --- 查询工资最高的员工信息

select * from emp where sal=(select max(sal) from emp)

              --- 查询工资高于平均工资的雇员名字和工资

select ename,sal from emp where sal>(select avg(sal) from emp)

        ----- 多行不相关子查询

             any————任何
             all————全部
             select * from emp where sal>any/all(select语句)

        ----- 相关子查询

               ---查询本部门最高工资的员工

select * from emp e 
where sal =(select max(sal) from emp where deptno=e.deptno) 
order by deptno

              --- 查询工资高于其所在岗位的平均工资

select * from emp e 
where sal>= (select avg(sal) from emp where emp.job=e.job) 
order by deptno desc                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470227.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云nginx SSL证书配置

本章教程,记录在使用腾讯云域名nginx证书配置SSL配置过程。 一、nginx配置 域名和证书,替换成自己的即可。证书文件可以自定义路径位置。服务器安全组或者防火墙需要开放80和443端口。 server {#SSL 默认访问端口号为 443listen 443 ssl; #请填写绑定证书的域名server_name c…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

Nginx配置自带的stub状态实现活动监控指标

场景 为了确保应用以最佳性能和精度运行&#xff0c;需要清晰地了解有关其活动的监控指标。 NGINX 提供了多种监控选项&#xff0c;例如 stub 状态。 注&#xff1a; 博客&#xff1a;霸道流氓气质-CSDN博客 实现 启用 NGINX stub 状态 启用 NGINX HTTP 服务器内 locati…

vscode下nuget包的本地引入方法

优势&#xff1a; nuget包的本地引入可以方便打包后的本地测试&#xff0c;确保打包正确、功能完善后再上传至nuget服务端本地引入方式也极为简单&#xff0c;三步操作即可搞定&#xff0c;熟悉之后这个操作2分钟内就可以搞定 具体步骤&#xff08;以引入Epic.RobotService包…

【知识科普】SPA单页应用程序介绍

SPA单页应用程序 概述和传统的多页应用有什么区别&#xff1f;用户体验架构和开发性能和优化SEO&#xff08;搜索引擎优化&#xff09;维护和扩展 如何优化SEO服务端渲染和预渲染有什么区别&#xff1f; 概述 SPA&#xff0c;全称为Single Page Application&#xff08;单页应用…

免费HTML模板和CSS样式网站汇总

HTML模板&#xff1a;&#xff08;注意版权&#xff0c;部分不可商用&#xff09; 1、Tooplate&#xff0c;免费HTML模板下载 Download 60 Free HTML Templates for your websitesDownload 60 free HTML website templates or responsive Bootstrap templates instantly from T…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

【go从零单排】Random Numbers、Number Parsing

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 这里是引用 &#x1f4bb;代码 Random Numbers package mainimport ("fmt…

网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施

在数字媒体时代&#xff0c;视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器&#xff0c;以其强大的功能和易用性受到广泛欢迎。然而&#xff0c;在使用过程中&#xff0c;用户可能会遇到视频地址无法播放的问题&#xff0c;这不仅影响用户…

mysql5.7安装SSL报错解决(2),总结

Caused by: java.io.EOFException: SSL peer shut down incorrectly 在java里面连接mysql5.7.17数据库&#xff0c;报以上错误&#xff0c; 将数据库升级到mysql5.7.44就可以了。 这两天处理java连接mysql的问题&#xff0c;报了各种错误&#xff0c;总结一下就是openssl和mysq…

vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)

1. 问题现象 环境&#xff1a; 系统&#xff1a;win11node&#xff1a;v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目&#xff0c;期望&#xff1a; App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际&#xff1a; App runn…

【vue2.0入门】vue单文件组件

目录 引言一、配置编辑器vue2代码片段模版1. 配置vue2代码模版2. 使用vue模版 二、模版介绍1. template区域2. script 区域2.1 name2.2 components2.3 props2.4 data2.5 computed2.6 watch2.7 methods2.8 生命周期函数 3. style 区域 三、总结 引言 本系列教程旨在帮助一些零基…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…

【Qt】Macbook M1下载安装

文章目录 一、下载Xcode命令行工具二、在Cion中配置编译器三、安装Qt四、配置qmake环境五、创建Qt项目 博主已经下载了Clion&#xff0c;所以本文是将qt配置到Clion上 本博客所写的教程有一定的问题&#xff0c;因为我在官网下载后发现有一些所需的包是没有的&#xff0c;不知道…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景&#xff1a;从开发&#xff0c;创建makefile、编译、单元测试、到生产部署都只有俺一个人&#xff0c;所以所有的工作都要自己完成&#xff0c;因此有了想法做一个插件&#xff0c;按需实现&#xff1a;构建Makefile&#xff0c;编译、打包、压缩、上传服务器、解压、安装…

docker之容器设置开机自启(4)

命令语法&#xff1a; docker update --restartalways 容器ID/容器名 选项&#xff1a; --restart参数 no 默认策略&#xff0c;在容器退出时不重启容器 on-failure 在容器非正常退出时&#xff08;退出状态非0&#xff09;&#xff0c;才会重启容器 …

动态规划 —— 子数组系列-最大子数组和

1. 最大子数组和 题目链接&#xff1a; 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-subarray/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;以i位置为结…

【教程】华南理工大学国际校区宿舍门锁声音设置

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 视频教程&#xff1a;【教程】华南理工大学国际校区宿舍门锁声音设置_哔哩哔哩_bilibili 来自&#xff1a; https://tieba.baidu.com/p/8297840035

【AI技术对电商的影响】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…