2022年02月08日

sql是一种结构化标准的查询语言,程序员主要学习的就是sql语句,sql在mysql中可以使用,同时,在oracel中可以使用也可在db2中也可以使用.操作数据,数据库就是文件具有特定格式的文件,结构化查询语言,先安装数据库管理系统mysql,然后学习sql语句怎么写,编写sql语句之后对dbms对sql语句进行执行,最后完成数据库的数据管理.

端口号:

端口号port是任何一个软件都会有的,端口号是应用的唯一代表,端口号通话仓和ip地址在一块,ip地址用来定位计算机的,端口号port,是用来定位计算机上某个服务的某个应用的,在同一计算机端口号不能重复,具有唯一性,mysql数据库启动的时候,默认的端口号是3306,字符集设置mysql数据库字符编码方式为utf-8,先选中第三个按钮在utf-8,服务的名字,指定的服务名称默认是mysql不用改

每个字段都有字段名和数据类型,约束等属性,字段名可以理解是一个普通的名字,简明之意就行,

字段名可以理解是一个普通名字简明自已就行,字符类型字符串数字日期等,数据有约束,数据库是逻辑名称,查看某个数据库下有哪些表show tables,dql,ddl,tcl,dcl,数据查询,数据定义,数据控制语言grant,撤销权限,分门别类.

+---------------------------+
| Database                  |
+---------------------------+
| information_schema        |
| bjpowernode               |
| book                      |
| db1                       |
| db2                       |
| entertainmentagencymodify |
| lll                       |
| mydb4                     |
| mysql                     |
| ooo                       |
| performance_schema        |
| sys                       |
+---------------------------+

dept是部门表,emp是员工表,salgrade是工资等级表,不看表数据只看表结构desc,varchar就是java中的string,数据类型,工资等级,最低工资最高工资, emp,desc是describe的缩写,常用命令,查看版本号用version,查看使用的是哪个数据库用database(),不见分号不执行,注意mysql是不见分号不执行,终止命令的技术使用/c一下,用来终止.不见分号不执行,简单查询,sql语句dql语句.

1.查询一个字段select 字段名 from 表名;

    select 和from都是关键字,字段名和表名都是标识符,强调对于sql语句来说是通用的,所有的是以;结尾,不区分大小写都行,查询员工名字,查询一个字段,查询多个字段

2.查询两个字段使用","隔开

    查询两个字段,如果查询多个字段用逗号隔开,查询所有的使用*第一种方式可以把每个字段都写上.第二种方式使用*,多有的列全部写出,但是效率很低,因为先把星号转换为字段,所以效率低,可读性差,可以在dos中窗口看一看全表数据采用这种方式,查询所有字段,可读性强效率高,查询的列起别名,用as 关键字起别名,只是将显示的查询结果列名显示为deptname,原表类名还是叫dname,select语句是永远不会进行修改操作的,因为只负责查询,as 关键字可以省略吗.可以,会把.起别名中有空格怎么办?dbms看到这样的语句,进行dql语句编译不符合语法报错,在所有数据库总字符串统一使用单引号括起来,数据库中的字符串都是采用单引号括起来,双引号.计算员工的年薪,员工名字和工资,每个员工的年薪,字段可以使用数学表达式,起别名,别名可以中文但要使用单引号括起来,起别名用as 字段可以加减乘除运算,条件查询就是带条件进行筛选

3.条件查询:

    就是不是将表中所有数据都查出来,是查询处理符合条件的语法格式是select....from....where条件,等于不等于小于小于等于,都有哪些条件,查询薪资等于800的员工姓名和工资符号是不等号,不等号可以是<>工资小于,不等号,查询薪资大于3000的,select,等于能否查询字符串?查询薪资区间的员工薪资,第二种方式是使用between和and,工资在这个区间,等同于注意使用between and的时候必须遵循左小右大的方式才能使用闭区间.包括两端的值,查询哪些员工的津贴补助为null 要用is不能用=null,在数据库中不能用等号要用null,没有值所有不能用等号.查询不为null的用is not null 津贴和补助不为null为null是isnull,and,and和null同时出现的时候有优先级的问题,and的优先级比or高,如果想让,如果不确定优先级加小括号,查询工资岗位是manager和salesman的员工,in 相当于多个or 不是一个区间,in后面跟的是具体的值,,查询薪资是800和5000的薪资,找出来,不是表示都找出来,是找出800和5000的,not in 表示不在括号里的not取反,is not null ,like是表示模糊查询,支持%匹配任意过个字符下划线表示任意一个字符,找出名字汇总含有o的,查询出名字里面含有o,找出名字以什么开始结尾的使用%,找出名字第二个字母是a的就用_1%,找出第三个字母是r的用两个下划线;找出名字中有下划线的,下划线,建表:先create在insert,commit是提交十五,数据库在进行插入操作的时候需不需要commit取决于数据库的存储殷勤是否支持书屋处理,如果不支持输入处理则,转义字符斜杠转义字符,\中是转义的意思可以不当成代码读取.

4.排序

查询所有员工薪资,指定降序,指定升序,默认是升序,用asc,默认就是升序,order by 会按照工资排序,可以两个字段排序,几多个字段排序,按照升序,如果名字一样的话再按照名字,先按照.sal在前启动,按照多个字段进行排序,根据字段的位置进行排序,第二列是,按照第二列来排序,了解一下,不建议在开发中这样写,列的顺序很容易发生改变,列修改后就废了.

16.综合案例

找出工资在1250和3000之间的员工信息,要求薪资降序拍了,select ename,sal 关键字的顺序不能变,

以上语句的执行顺序必须掌握,第一步是from 第二步是where 第三步是select 第四步是order byfrom where select order by分组查询,简单查询,条件查询,单行处理函数,

5.数据处理函数

又被成为单行处理函数,分组函数,单行处理函数的特点是一个输入对应一个输出,和单行处理函数相对的是多行处理函数,计算员工薪资的和单行处理函数常见的有哪些,lower 转换小写,upper 转换大写,对列的名字不满意可以起别名,列的名字,数据由大写变成小写,遇到需求后,得出小写的smith,输入对应输出,单行处理函数,输入几行就输出几行,起始下标从1开始没有0个位,找出员工名字第一个字母是a的员工信息,可以使用截串,substr是截串,substr是截子串的,  多个函数嵌套,转小写lower,lengt是获取长度,from 重命名,直接粘贴,trum取出前后空白,trim可以把前后空白去掉,round四舍五入,如果跟的是,select后面可以跟着变量也可以跟数据,可以跟表字段的名字,可以跟表的字段名,可以跟字面值,字段名可以等同看做变量名,可以看做是数据,借助表结构.round()是四舍五入,两个参数,第一个是数据,第二个是位数对于表的数据进行四舍五入,1是保留1个小数,2是保留两位小数,0是保留整数位,如果是负数位数往左移,round函数进行四舍五入.生成随机数,用rand,单行处理函数,生成随机数,select rand( ) from emp,一百以内的随机数,ifnull是空处理函数,专门处理空的round(rand * 100),只要有null参与属性凡是空值参加的结果都为null,数据库中这样规定的最后结果都是null,年薪select ename, null只要参与运算最终结果一定是null,为了避免,使用ifnull函数,ifnull(数据,被当做那个值),如果整体为0就可以算出来了,对空进行处理,case when then,when,then,else end当员工的工作岗位是不修改数据库,知识将查询结果显示为上调.

6.分组函数(多行处理函数)

是多行处理函数,count计数的,sum求和,avg求平均值,max最大值,min最小值,分组函数都是必须分组,如果没有对数据进行分组整张表默认为一组,找出最高工资.计算工资,分组函数在使用的时候需要注意:分组函数自动忽略null,不需要提前对null进行处理,分组函数自动忽略null的不需要加条件进行过滤,第二点:分组函数中count(*)和count(具体字段)有什么区别,count表示该字段下所有不为null的元素的总数,count(*)表示多少行,只要是有记录的肯定是有一列不为null,不存在,没有这行的记录,代表的是行记录,统计表当中的总行数,只要有一行数据则++,统计的是总行数,因为每一行不可能都为null,只要有一条不为null则是有效的.自动忽略null,分组函数的区别,分组函数不能直接使用在where子句中,找出比最低工资高的员工信息,无效的使用了分组函数,分组查询groupby 所有的分组函数可以组合起来一起用,select sum(sal), sum(sal) from emp;

7.分组查询

实际的应用中可能出现先分组然后对每一组进行查询,将之前的关键字全部组合在一起,from  where group by , select,分组函数必须分组之后才能使用, group by后才能用分组函数 ,select在groupby后面执行,没写group by自动分成一组,什么是分组查询,找出每个工作岗位最高工资工资和,按照工作岗位分组对工资求和,先分组然后对每一组求和,先分组然后对组求和,select 语中如果有select如果有分组字段函数,参加分组的字段以及分组函数,其他的不能跟,,找出每个.select 后面添加ename字段没意义会报错,找出.每个部门的不同工作岗位薪资,manager每个部门不同工作岗位的薪资,技巧是两个字段连成一个字段看,manage,按照两个字段联合起来分组,根据分组字段写到select后面.第二步最高薪资大于3000的,having不能单独使用,having不能代替where,having必须和groupby联合使用 ,以上的sql语句执行效率是不是低,先将大于3000的都找出来,然后再分组,where和having优先选择where做不了的用having,按照分组求平均薪资,要求平均薪资高于2500,总结单标的查询select 5 from 1 where2 group by 3 having4 order by 6,以上关键字只能按照这个顺序来不能颠倒,对有价值的数据进行,分组,表时一个结构化文件,可以用来储存特点的数据,表很直观,  查看表的结构,查询宣布字段用select,select ename, sal*12,单引号,双引号,条件查询,in和or是一样的,mqsql和java对比是sql好学一些,条件查询后,用排序查询,单行函数,是单行处理,多行是多行对应多个输出,select 永远是数据库查询不会改变表

group by
    having只能和它连用
    分组函数必须在它后面用,如sum()等
    分组函数自动忽略空(null)

,where搞不定的才会用having,函数当中的值可能存在,去除重复记录distinct,把查询结果去重不会改动,需要使用distinct, ename ,有两个值就是联合起来去除重复记录. 两个字段联合起来去重,统计工作岗位的数量,统计工作岗位的数量,distinct,去除重复记录,连接查询,一张表中单独查询称为单表查询,从emp表中取员工名字,从dept表中取部门名字,跨表查询称为连接查询

8.连接查询

    根据年代分类,sql92和sql99根据连接的方式分为内连接和外连接和全连接,内连接分为等值连接,非等值连接和自连接,外连接分为左外连接,右外连接和全连接,左外连接称为左连接,右外称为右连接,根据两张表的方式讲解.当两张表进行连接查询时,没有任何任何条件的显示会发现什么现象?查询每个员工所在部门名称,每个员工所在的部门名称.两张表连接没有任何条件限制,当两张表进行查询没有任何条件限制的时候,最终查询结果条数,是两张表的乘积,属于笛卡尔积现象.得出结论,两张表的连接查询,连接时加条件满足条件的记录被筛选处理,只要是上面表的部门编码和下面的相等就可以,表名.当员工表的部门编号.最终的查询结果条数是14但是匹配过程中的匹配次数没有减少,还是56次,只不过进行了4选1,匹配成功后会继续匹配,匹配次数没有减少,满足条件的会查出来,sql92语法,连接查询,如果是两张表进行查询会发生笛卡尔积现象,说明底层查询的.一张表有上万条记录是很正常的,通过迪卡尔积现象连接次数越多,效率越低

9.内连接之等值连接

查询每个员工名称,是直接连接,99 的语法是join,表连接后and后面加条件.表连接就是表连接sql92的确定是列国不清晰,表的连接条件和后期进一步筛选条件进一步添加where,select..from emp e数据库管理员,select ..from a join b on a和b的连接条件 where 筛选条件,什么样的数据库底层原理都要做一下,sql99内连接,执行结果inner是可以省略的inner是两个表一样的数据连接一起.带着inner可读性更好,条件是等量关系所以是等值连接,非等值连接,条件不是等量关系称为非等值连接.inner是可以省略的.

10.内连接之自连接

案例:查询员工的上级领导,要求显示员工名和对应的领导名,技巧一张表看成两张表,mysql> select a.ename as "员工名", b.ename as "领导名" from emp a join emp b on a.mgr = b.empno where ;内连接的技巧,一张表看成两张表,十三条记录没有king,特殊业务会更复杂一些,员工的领导编号等于领导的员工编号

10.外连接

内连接的特点,完全能匹配上这个条件查询出来,把员工和部门信息显示出来,把没匹配的记录同样展示出来,把后加的都显示出来,inner join是显示两个表有共同的,而left join和right join是把左/右或者叫前面的表/后面的表,除了要的信息外其余的也显示出来,除了null表示什么都没有;右外连接.如果是,a,b两张表有主次关系,任何一个右连接都有左连接的写法,任何一个左连接都有右连接的写法outer是可以省略的可读性强,外连接和内连接的区别表示;主要是看关键字:思考外连接的查询结果条数一定是大于内连接的吗,正确.查询每个员工上级领导.要求显示所有员工的名字,和领导名.外连接.右外连接左外连接

11.三张表和四张表的连接

select ... from a joinb on ...join c on 多表连查,内外混合,都可以出现

mysql> select e.ename, e.sal, d.dname, s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;
+--------+---------+------------+-------+
| ename  | sal     | dname      | grade |
+--------+---------+------------+-------+
| SMITH  |  800.00 | RESEARCH   |     1 |
| ALLEN  | 1600.00 | SALES      |     3 |
| WARD   | 1250.00 | SALES      |     2 |
| JONES  | 2975.00 | RESEARCH   |     4 |
| MARTIN | 1250.00 | SALES      |     2 |
| BLAKE  | 2850.00 | SALES      |     4 |
| CLARK  | 2450.00 | ACCOUNTING |     4 |
| SCOTT  | 3000.00 | RESEARCH   |     4 |
| KING   | 5000.00 | ACCOUNTING |     5 |
| TURNER | 1500.00 | SALES      |     3 |
| ADAMS  | 1100.00 | RESEARCH   |     1 |
| JAMES  |  950.00 | SALES      |     1 |
| FORD   | 3000.00 | RESEARCH   |     4 |
| MILLER | 1300.00 | ACCOUNTING |     2 |
+--------+---------+------------+-------+

如果升级案例,在找出上级领导,多表连查

12.子查询

什么是子查询?select语句中乔涛select语句,被嵌套的语句成为子查询,where子句中不能使用分组函数,第一步找800,第二步找出大于800的,第三步合并,套娃在编程中很常见,from子句中的子查询,可以将子查询的记过当成一阵临时表:案例找出每个岗位的平均工资的薪资等级,第一步找出每个岗位的平均工资,按照岗位分组求平均值,select job ,克服心理障碍,现在的薪资等级表和t表进行表连接t.表和s表进行表连接,条件是e表的avgsal

select t.*, s.grade from (select distinct job, avg(sal) as avg_sal from emp group by job) t join salgrade s on t.avg_sal between s.losal and s.hisal;
+-----------+-------------+-------+
| job       | avg_sal     | grade |
+-----------+-------------+-------+
| ANALYST   | 3000.000000 |     4 |
| CLERK     | 1037.500000 |     1 |
| MANAGER   | 2758.333333 |     4 |
| PRESIDENT | 5000.000000 |     5 |
| SALESMAN  | 1400.000000 |     2 |
+-----------+-------------+-------+
5 rows in set (0.00 sec)
每个工作岗位,把结果当成临时表,子查询  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值