首页 > 数据库 >MySQL数据库:SQL语言入门 【1】(学习笔记)

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

时间:2024-11-14 20:45:31浏览次数:3  
标签:入门 MySQL 查询 ----- emp SQL deptno where select

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

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

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

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

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

  • 介绍MySQL数据库

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

目录

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

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

(1)组成结构

(2)单表查询

【1】介绍 select 部分

===简单的算术运算

===去重操作   

===介绍 order by

【2】介绍  where  部分

===关系运算符 

===逻辑运算符   

===空值判断

===模糊查询     

===小括号的使用

【3】函数

===分类:   

===单行函数

      ----- 字符串函数

      ----- 日期时间函数

​编辑

      ----- 流程函数

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

      ----- 介绍 group by 和 having 

      ​编辑

(3)多表查询

===分类

===内连接查询

       ----- 【写法一】 

        ----- inner join  . . . on    【写法二】     

        ----- 关键字  using        【写法三】

        ----- 自然连接               【写法四】 

        ----- 自身内连接 (一张表)

===外连接查询

(4)子查询

===分类



一,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                        

标签:入门,MySQL,查询,-----,emp,SQL,deptno,where,select
From: https://blog.csdn.net/2301_81819439/article/details/143682774

相关文章

  • 2024/11/13日 日志 代码优化 以及 JSP 的快速入门、原理、脚本、缺点 和 EL表达式 以
    代码优化--创建SqlSessionFactory代码优化点击查看代码--//2.1获取SqlSessionFactory对象--Stringresource="mybatis-config.xml";--InputStreaminputStream=Resources.getResourceAsStream(resource);--SqlsessionFactorysqlSessionFactory=newSqlSessio......
  • 轻松掌握Spring:快速入门指南 (免费学习!!!)
    目录一、Spring简单介绍二、Java反射机制三、SpringIOC机制3.1使用构造器来实例化Bean3.2使用静态工厂实例化Bean3.3使用实例工厂来实例化Bean3.4SpringIOC实现原理3.5SpringBean的作用域四、SpringAOP机制4.1相关概念4.2利用proxy实现AOP功能4.3利用......
  • SpringBoot快速入门
    一、SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它基于SpringFramework构建,但并不是Spring的替代者或精简版本,而是为了让程序员更好地使用Spring。SpringBoot通过提供默认配置和“习惯优于配置”的理念,使得开发者......
  • 程序员如何入门?零基础入门到精通,收藏这一篇就够了
    以下内容仅供参考建议。做任何事情,最关键的是先入门,所谓的入门,是你进入一家公司,然后开始给人家干活,并且能够提供合格的交付件,这就算入门了。那么做编程到底到了哪个地步才算入门呢?我的目的就是在你一行代码还没写的时候,给一些建议。不管任何企业,厉害的人应该是主动的帮企业......
  • docker-compose安装pgsql和pgvector
    快速安装PostgreSQL和pgvector1、创建Dockerfile文件,代码如下:#使用PostgreSQL16基础镜像FROMpostgres:16#安装pgvectorRUNapt-getupdate&&\apt-getinstall-ypostgresql-16-pgvector&&\rm-rf/var/lib/apt/lists/*#设置启动命令CMD["postgr......
  • FastHTML快速入门:服务器渲染超媒体应用的利器
    项目简介FastHTML是一个Python库,它将Starlette、Uvicorn、HTMX和fastcore的FT"FastTags"融合在一起,用于创建服务器渲染的超媒体应用程序。FastHTML类本身继承自Starlette,并增加了基于装饰器的路由、Beforeware、自动将FT渲染为HTML等功能。写作FastHTML应用时需记住的事......
  • mysql可视化工具 Navicat Premium 12解压版
    通过网盘分享的文件:NavicatPremium12解压版.rar链接:https://pan.baidu.com/s/1kDLlrcaiQRYGLfN5L-IpPA?pwd=3k6h提取码:3k6h--来自百度网盘超级会员v8的分享 1.解压到指定路径 2.快捷方式,快捷方式用不了,就直接在该文件中直接打开 3.测试链接    ......
  • 【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】
    目录一、全局锁二、表级锁    1.表锁    2.元数据锁    3.意向锁三、行级锁    1.行锁        2.间隙锁        3.临建锁锁是处理并发情况下,对数据的一致性的关键因素,也是并发情况下对效率影响非常大的。1、......
  • 【MYSQL】InoDB引擎以及MVCC多版本并发控制【详解】
    一、逻辑存储架构        一个表空间对应的一个ibd文件,里面有许多段,其中包括数据段和索引段还有回滚段,在数据存储模型中的B+树中,叶子节点就是数据段进行存储的,非叶子节点就是索引段进行存储的,回滚段里存储了undolog日志。然后里面还分为区->页->行二、架构......
  • 如何使用 MySQL Workbench 自动生成 ER 图、同步更新远程数据库 - MySQL Workbench 使
    https://zhuanlan.zhihu.com/p/438270644       ......