diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230213 mysql\347\232\204\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" "b/04 \345\220\264\350\211\257\347\241\274/20230213 mysql\347\232\204\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..0a2f7b7374b2fc60ae0d8f77ef955dbe7ee2d079 --- /dev/null +++ "b/04 \345\220\264\350\211\257\347\241\274/20230213 mysql\347\232\204\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" @@ -0,0 +1,59 @@ +## MySQL数据库服务端的安装 + +度娘下载安装 + +## 使用客户端登录MySQL服务器端 + +### 方式一:MySQL自带客户端 + +开始菜单==》所有程序==》MySQL==》MySQL Server 5.7==》MySQL 5.7 Command Line Client + +![image-20211127163922026](MySQL5.7笔记.assets/image-20211127163922026.png) + +> 说明:仅限于root用户在本机登录 + +### 方式二:使用cmd命令连接 + +**mysql -h 主机名 -P 端口号 -u 用户名 -p密码** + +```sql +例如:mysql -h localhost -P 3306 -u root -proot +``` + +注意: + +(1)-p与密码之间不能有空格,其他参数名与参数值之间可以有空格也可以没有空格 + +```sql +mysql -hlocalhost -P3306 -uroot -proot +``` + +(2)密码建议在下一行输入 + +```sql +mysql -h localhost -P 3306 -u root -p +Enter password:**** +``` + +(3)如果是连本机:-hlocalhost就可以省略,如果端口号没有修改:-P3306也可以省略 + + 简写成: + +```sql +mysql -u root -p +Enter password:**** +``` + +![1554910994523](MySQL5.7笔记.assets/1554910994523.png) + +连接成功后,有关于MySQL Server服务版本的信息,还有第几次连接的id标识。 + +![img](MySQL5.7笔记.assets/clip_image002.jpg) + +### 方式三: 使用第三方工具navicat连接 + +Mysql常用的三方工具有很多,比如大名鼎鼎的navicat,sqlyog等等,这里我们使用navicat来做一个连接的事例。首先打开工具,在工具左侧选择新建连接,然后选择要连接的数据库为mysql,然后会弹出一个具体的连接配置的窗口。 + +![img](MySQL5.7笔记.assets/clip_image004.jpg) + +该窗口在正常连接状态下,只需要填入连接名称,主机的地址,连接端口号,用户名及密码即可。填写完毕点击测试,如果测试成功保存就可以打开我们的mysql数据库连接了。 \ No newline at end of file diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230215\345\273\272\346\225\260\346\215\256\345\272\223\345\222\214\350\241\250.md" "b/04 \345\220\264\350\211\257\347\241\274/20230215\345\273\272\346\225\260\346\215\256\345\272\223\345\222\214\350\241\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..c18249a8b0df048e91556126ec32d014d1191d14 --- /dev/null +++ "b/04 \345\220\264\350\211\257\347\241\274/20230215\345\273\272\346\225\260\346\215\256\345\272\223\345\222\214\350\241\250.md" @@ -0,0 +1,41 @@ +## 笔记 + +```mysql +SHOW DATABASES 查看所有数据库 +CREATE DATABASE 数据库名 +USE 数据库名 +SELECT DATABASE(): +DROP DATABASE 数据库名 + +SHOW TABLES +CREATE TABLE 表名(字段 字段类型,字段 字段类型 ); +DESC 表名 +SHOW CREATE TABLE 表名 +ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO ... ;DROP TABLE 表名; +``` + + + +## 作业 + +```mysql +CREATE database stu; +use stu; +CREATE TABLE `student` ( + `number` bigint(20) DEFAULT NULL, + `name` varchar(4) DEFAULT NULL, + `gender` varchar(1) DEFAULT NULL, + `hobby` varchar(5) DEFAULT NULL, + `address` varchar(20) DEFAULT NULL, + `telephone` char(11) DEFAULT NULL, + `mailbox` varchar(20) DEFAULT NULL, + `qq` varchar(13) DEFAULT NULL +) + +-- + +-- + +INSERT INTO `student` VALUES (2244310104,'无','男','打羽毛球','地球村','15559013564','2242707601@qq.com','2242707601'); +``` + diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230218.md" "b/04 \345\220\264\350\211\257\347\241\274/20230216 DDL\345\222\214DML.md" similarity index 100% rename from "04 \345\220\264\350\211\257\347\241\274/20230218.md" rename to "04 \345\220\264\350\211\257\347\241\274/20230216 DDL\345\222\214DML.md" diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230220\347\272\246\346\235\237.md" "b/04 \345\220\264\350\211\257\347\241\274/20230220 \347\272\246\346\235\237.md" similarity index 100% rename from "04 \345\220\264\350\211\257\347\241\274/20230220\347\272\246\346\235\237.md" rename to "04 \345\220\264\350\211\257\347\241\274/20230220 \347\272\246\346\235\237.md" diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230222select \350\277\220\347\256\227\347\254\246.md" "b/04 \345\220\264\350\211\257\347\241\274/20230222 select\346\237\245\350\257\242 \350\277\220\347\256\227\347\254\246.md" similarity index 100% rename from "04 \345\220\264\350\211\257\347\241\274/20230222select \350\277\220\347\256\227\347\254\246.md" rename to "04 \345\220\264\350\211\257\347\241\274/20230222 select\346\237\245\350\257\242 \350\277\220\347\256\227\347\254\246.md" diff --git "a/04 \345\220\264\350\211\257\347\241\274/20230223 \351\242\204\344\271\240\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/04 \345\220\264\350\211\257\347\241\274/20230223 \351\242\204\344\271\240\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..25679c2a249311d1bdcfb57684d89f00353cf37a --- /dev/null +++ "b/04 \345\220\264\350\211\257\347\241\274/20230223 \351\242\204\344\271\240\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" @@ -0,0 +1,262 @@ +## 关联查询 + +## 连表 + +- 从一张表中单独查询,称为单表查询 +- emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。 +- 这种跨表查询,多张表联合起来查询数据,被称为连接查询。 + +select ename,dname from emp, dept; + +- 当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。 + +### 6.1内连接之等值连接 + +**查询每个员工所在部门名称,显示员工名和部门名?** + +- emp e和dept d表进行连接。条件是:e.deptno = d.deptno + +```mysql +SQL92语法: + select + e.ename,d.dname + from + emp e, dept d + where + e.deptno = d.deptno; + + sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。 + +SQL99语法: + //inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接) + select + e.ename,d.dname + from + emp e + inner join + dept d + on + e.deptno = d.deptno; // 条件是等量关系,所以被称为等值连接。 + sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where +``` + +### 6.2内连接之非等值连接 + +**找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级?** + +```mysql +select + e.ename, e.sal, s.grade +from + emp e +join + salgrade s +on + e.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。 +``` + +### 6.3内连接自己连接 + +**查询员工的上级领导,要求显示员工名和对应的领导名?** + +```mysql +技巧:一张表看成两张表。 +select + a.ename as '员工名', b.ename as '领导名' +from + emp a +join + emp b +on + a.mgr = b.empno; //员工的领导编号 = 领导的员工编号 +``` + +### 6.4外连接 + +- 内连接:(A和B连接,AB两张表没有主次关系。平等的。) +- 内连接的特点:完成能够匹配上ON后面的条件的数据查询出来。 + +```mysql +// outer是可以省略的,带着可读性强。 +select + e.ename,d.dname +from + emp e +right outer join + dept d +on + e.deptno = d.deptno; +``` + +- right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将 +- 这张表的数据全部查询出来,捎带着关联查询左边的表。 +- 在外连接当中,两张表连接,产生了主次关系。 + +```MySQL +select + e.ename,d.dname +from + dept d +left outer join + emp e +on + e.deptno = d.deptno; + +带有right的是右外连接,又叫做右连接。 +带有left的是左外连接,又叫做左连接。 +任何一个右连接都有左连接的写法。 +任何一个左连接都有右连接的写法。 +``` + +### 6.5多表连接 + +**三张表,四张表怎么连接?** + +```mysql + 语法: + select + ... + from + a + join + b + on + a和b的连接条件 + join + c + on + a和c的连接条件 + right join + d + on + a和d的连接条件 +``` + +**找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级?** + +```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; +``` + +**找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级?** + +```MySQL +select + e.ename,e.sal,d.dname,s.grade,l.ename +from + emp e +join + dept d +on + e.deptno = d.deptno +join + salgrade s +on + e.sal between s.losal and s.hisal +left join + emp l +on + e.mgr = l.empno; +``` + +## 分组查询 + +### group by + +**找出每个工作岗位的工资和?** + +```mysql + 实现思路:按照工作岗位分组,然后对工资求和。 + select + job,sum(sal) + from + emp + group by + job; +以上这个语句的执行顺序? +先从emp表中查询数据。根据job字段进行分组。然后对每一组的数据进行sum(sal) +``` + +- 在一条select语句当中,如果有group by语句的话,select后面只能跟:**参加分组的字段,以及**分组函数。其它的一律不能跟。** + +**找出每个部门的最高薪资** + +```mysql +实现思路:按照部门编号分组,求每一组的最大值。 + mysql> select deptno,max(sal) from emp group by deptno; +``` + +### 联合分组 + +**找出“每个部门,不同工作岗位”的最高薪资?** + +```mysql +技巧:两个字段联合成1个字段看。(两个字段联合分组) + select + deptno, job, max(sal) + from + emp + group by + deptno, job; +``` + +### having + +- 使用having可以对分完组之后的数据进一步过滤。 +- having不能单独使用,having不能代替where,having必须和group by联合使用。 + +**找出每个部门平均薪资,要求显示平均薪资高于2500的。** + +```mysql +select + deptno,avg(sal) +from + emp +group by + deptno +having + avg(sal) > 2500; +``` + +- where和having,优先选择where,where实在完成不了了,再选择having。 + +### 总结sql执行顺序 + +- select --> from --> where --> group by --> having --> order by --> 以上关键字只能按照这个顺序来,不能颠倒。 + +执行顺序? 1. from --> where --> group by --> having --> select --> order by + +1. 从某张表中查询数据, +2. 先经过where条件筛选出有价值的数据。 +3. 对这些有价值的数据进行分组。 +4. 分组之后可以使用having继续筛选。 +5. select查询出来。 +6. 最后排序输出! + +```mysql +找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外, +要求按照平均薪资降序排。 + select + job, avg(sal) as avgsal + from + emp + where + job <> 'MANAGER' + group by + job + having + avg(sal) > 1500 + order by + avgsal desc; +``` \ No newline at end of file