MySql
本文最后更新于307 天前,其中的信息可能已经过时,如有错误请发送邮件到3063503032@qq.com

基础概念:

  1. 数据库(Database):
    • 数据库是一个有组织的、结构化的数据集合,用于存储、管理和检索数据。
  2. 表(Table):
    • 表是数据库中的一种结构,用于存储数据。表由列(字段)和行组成,每列定义了数据的类型。
  3. 列(字段):
    • 列是表中的数据存储单元,每一列都有一个特定的数据类型,如整数、字符串、日期等。
  4. 行(Record):
    • 行是表中的一个记录或数据行,包含了各列的实际数据。
  5. 主键(Primary Key):
    • 主键是用于唯一标识表中每一行数据的字段或字段组合,确保数据的唯一性和完整性。
  6. 外键(Foreign Key):
    • 外键是一个字段或字段组合,它与另一个表中的主键或唯一键形成关联,建立表与表之间的关系。
    在mysql中,所有的指令是不区分大小写的 -mysql是基于表来存储数据 -表 table -column 对应的是表中的每一个字段 -存储 学生数据 创建一个表student -学生姓名 name(column ) 类型 varcahr(字符串类型) -年龄 age 整型int -id 10000 -在mysql中创建表table,每一张表都会有对应的 ‘主键’ -主键的特点:不能为空 指的是当前记录的唯一标识,不能重复,将主键设置为自动递增 -外键的作用
    -在mysql中,可以关联两张或者是两张以上的表
    – student sid、sname、cid(外键)
    – class cid、cnmae
    -如果想知道每个学生对应的班级
    -可以选择在班级表中加一个外键

DDL(Data Definition Language):

DDL是用于定义和管理数据库结构的语言。

  1. 创建数据库:CREATE DATABASE database_name;
  2. 选择数据库:USE database_name;
  3. 创建表:CREATE TABLE table_name (
      column1 datatype1,
      column2 datatype2,
      …
       PRIMARY KEY (one_or_more_columns)
    );
  4. 修改表结构(添加列、删除列等):ALTER TABLE table_name
    ADD COLUMN new_column datatype;

    ALTER TABLE table_name
    DROP COLUMN column_to_drop;
  5. 删除表:DROP TABLE table_name;

DML(Data Manipulation Language):

DML用于操作和处理表中的数据。

  1. 插入数据:INSERT INTO table_name (column1, column2, …) VALUES (value1, value2, …);
  2. 查询数据:SELECT column1, column2, … FROM table_name WHERE condition;
  3. 更新数据:UPDATE table_name SET column1 = value1 WHERE condition;
  4. 删除数据:DELETE FROM table_name WHERE condition;

DQL

对表中的数据进行查询

查询数据:SELECT column1, column2, … FROM table_name WHERE condition;

DCL(Data Control Language):

DCL用于控制数据库访问权限和安全性。

  1. 授予权限:GRANT privilege ON object TO user;
  2. 收回权限:REVOKE privilege ON object FROM user;
  3. 提交事务:COMMIT;
  4. 回滚事务:ROLLBACK;

select

  • 查询表中所有数据

select * from table;

  • 查询某一列的数据

select (列名) form (表名);

  • 查询时给某些字段加别名

select (列名) as “别名” from (表名)#如果别名是字符串要加引号

查询薪水为5000的员工 -select * from emp where sal = 5000; -查询薪水为1600到3000的员工 between.. and ..
-select * from emp where sal between 1600 and 3000;

-查询薪水大于1800,并且部门代码为20或30的 and or
-select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);

-in()函数 包含的意思 ,查询管理部门和销售部门的员工
-select * from emp where job in(‘manager’,’salesman’);

-不包含 not in();
-select * from emp where sal not in (1600, 3000);

-Like 模糊查询
-根据模糊的值,查询出对应的数据
-查询所有姓名以M开头的员工
-select * from emp where ename like ‘M%’;

-查询姓名包含O的员工
-select * from emp where ename like ‘%O%’;

-查询姓名中第二个字符为A的所有员工
-select * from emp where ename like ‘_A%’;
##_表示匹配一个字符;%表示匹配多个字符
-排序 order by (要写在where语句的后面)
-按照薪水由小到大排序(系统默认由小到大 asc)
-select * from emp order by sal;

-asc 升序 系统默认的

-desc 降序排列

-手动指定按照薪水由大到小排序
-select * from emp order by sal desc;

-按照job和薪水倒序
-select * from emp order by job desc, sal desc;//先对job排序,再对sql排序

-聚合函数/分组函数
-count 求总记录数
-取得所有的员工数
-select count(*) from emp;
-select count(1) from emp;
-select count(*) ‘员工总条数’ from emp;
-取得所有的员工津贴不为空的个数
-select count(comm) from emp;

-distinct 去重
-取得工作岗位的个数
-select count(distinct job) from emp;

-sum 求和
-取得薪水的合计
-selec sum(sal) from emp;
+———-+
| sum(sal) |
+———-+
| 29025.00 |
+———-+

-IFNULL(comm, 0) 判断字段是否为null,如果为null,将对该字段进行数据转换
-取得薪水的合计(sal+comm)
-select sum(sal + IFNULL(comm, 0)) ‘所有的薪水加津贴的总和’ from emp;

-avg() 求平均值
-求所有员工的平均薪水
-select avg(sal) ‘平均薪水’ from emp;
+————-+
| 平均薪水 |
+————-+
| 2073.214286 |
+————-+

-max() 求最大值
-select max(sal) ‘最高薪水’ from emp;
-min() 求最小值
-select min(sal) ‘最低薪水’ from emp;

+———-+
| 最低薪水 |
+———-+
| 800.00 |
+———-+
-在select语句后面可以跟多个聚合函数
-select count(*),avg(sal),sum(sal),max(sal),min(sal) from emp;
-分组查询
-group by 分组的关键字
-having 对分组的数据再次进行过滤
-取得每个工作岗位的薪资合计
-select job,sum(sal) from emp group by job;//按照job分组
-select job ‘岗位’,sum(sal) ‘薪资总和’ from emp group by job;
+———–+———-+
| 岗位 | 薪资总和 |
+———–+———-+
| ANALYST | 6000.00 |
| CLERK | 4150.00 |
| MANAGER | 8275.00 |
| PRESIDENT | 5000.00 |
| SALESMAN | 5600.00 |
+———–+———-+
-select job ‘岗位’,sum(sal) ‘薪资总和’ from emp group by job order by sum(sal);(排序)
+———–+———-+
| 岗位 | 薪资总和 |
+———–+———-+
| CLERK | 4150.00 |
| PRESIDENT | 5000.00 |
| SALESMAN | 5600.00 |
| ANALYST | 6000.00 |
| MANAGER | 8275.00 |
+———–+———-+
-group by 分组的字段 必须在select的后面

//根据岗位和部门编码进行分组 job deptno

select job ‘岗位’,deptno ‘部门编号’,sum(sal) ‘薪资总和’ from emp group by job,deptno;
+———–+———-+———-+
| 岗位 | 部门编号 | 薪资总和 |
+———–+———-+———-+
| ANALYST | 20 | 6000.00 |
| CLERK | 10 | 1300.00 |
| CLERK | 20 | 1900.00 |
| CLERK | 30 | 950.00 |
| MANAGER | 10 | 2450.00 |
| MANAGER | 20 | 2975.00 |
| MANAGER | 30 | 2850.00 |
| PRESIDENT | 10 | 5000.00 |
| SALESMAN | 30 | 5600.00 |
+———–+———-+———-+

+——-+——–+———–+——+————+———+———+——–+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+——-+——–+———–+——+————+———+———+——–+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+——-+——–+———–+——+————+———+———+——–+
-在SQL语句中若有group by 语句,那么在select语句后面只能跟分组函数+参与分组的字段。 //求出每个岗位的平均薪资
-select job, avg(sal) from emp group by job;

+———–+————-+
| job | avg(sal) |
+———–+————-+
| ANALYST | 3000.000000 |
| CLERK | 1037.500000 |
| MANAGER | 2758.333333 |
| PRESIDENT | 5000.000000 |
| SALESMAN | 1400.000000 |
+———–+————-+

//过滤出大于2000的
-select job, avg(sal) from emp group by job having avg(sal) > 2000;

+———–+————-+
| job | avg(sal) |
+———–+————-+
| ANALYST | 3000.000000 |
| MANAGER | 2758.333333 |
| PRESIDENT | 5000.000000 |
+———–+————-+

-limit 分页
– select * from emp limit 起始索引位置,分页单位
-起始索引位置 (当前页 – 1) * 分页单位

-查询员工数据。3条记录为1页
-第一页的数据
-select * from emp limit 0,3; //1
+——-+——-+———-+——+————+———+——–+——–+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+——-+——-+———-+——+————+———+——–+——–+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
+——-+——-+———-+——+————+———+——–+——–+
-第2页的数据
-select * from emp limit 3,3; // 2
-select * from emp limit 6,3;// 3
-求出薪资排在前三的员工
-select ename,sal from emp order by sal desc limit 0,3;

-查询出 薪资排在 6 – 10 区间的
-select ename,sal from emp order by sal desc limit 5,5;

+——-+——–+———–+——+————+———+———+——–+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+——-+——–+———–+——+————+———+———+——–+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+——-+——–+———–+——+————+———+———+——–+

聚合函数

  1. COUNT(): 用于计算行的数量。sqlCopy code
    SELECT COUNT(*) FROM table_name;
  2. SUM(): 用于计算数值列的总和。sqlCopy code
    SELECT SUM(column_name) FROM table_name;
  3. AVG(): 用于计算数值列的平均值。sqlCopy code
    SELECT AVG(column_name) FROM table_name;
  4. MIN(): 用于找到数值列的最小值。sqlCopy code
    SELECT MIN(column_name) FROM table_name;
  5. MAX(): 用于找到数值列的最大值。sqlCopy code
    SELECT MAX(column_name) FROM table_name;

这些聚合函数可以与 GROUP BY 语句一起使用,以根据特定列的值对结果进行分组。

select总结

一个完整的select语句格式如下

select 字段 from 表名 where ……. group by …….. having …….(就是为了过滤分组后的数据而存在的—不可以单独的出现) order by …….. 以上语句的执行顺序

  1. 首先执行where语句过滤原始数据
  2. 执行group by进行分组
  3. 执行having对分组数据进行操作
  4. 执行select选出数据
  5. 执行order by排序 原则:能在where中过滤的数据,尽量在where中过滤,效率较高。having的过滤是专门对分组之后的 数据进行过滤的。

DML语句

-DML语句 数据操纵语言,对表中的数据进行增、删、改
-增 insert
-insert into emp
(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,comm,deptno)
values
(7936,’JACK’,’MANAGER’,7698,’1980-12-17′,3000.0,300.0,20);
-into 可以省略不写

-改 update
-修改jack的薪资为5000
-update emp set sal = 5000 where ename = ‘JACK’;

-修改jack的薪资为5000 ,comm为500
-update emp set sal = 5000,comm = 500 where ename = ‘JACK’;

-删除 delete
-删除编号为7936的员工
-delete from emp where empno = 7936;

多表查询

  1. 外连接(Outer Joins):
    • 外连接用于检索两个或多个表中的匹配行以及左表或右表中没有匹配的行。
    • 主要类型有左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、全外连接(FULL JOIN)。
    • 外连接会把主表的所有内容全部展示(包括null),leftjoin对应左边的表为主表
    • 语法示例:SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
  2. 多表查询:
    • 多表查询用于检索来自多个表的数据,通过JOIN关键字将这些表连接起来。
    • INNER JOIN用于返回两个表中匹配的行,是最常见的连接方式。
    • 语法示例:SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
  3. SQL92语句:
    • SQL92是SQL的标准版本,引入了许多通用的SQL语法。
    • 常见功能包括:子查询、IN运算符、EXISTS运算符、UNION运算符等。
    • 语法示例:SELECT column FROM table WHERE column IN (SELECT column FROM another_table);
  4. SQL99语句:
    • SQL99引入了一些更高级的功能,如窗口函数、CTE(Common Table Expressions)等。
    • 窗口函数用于在结果集中执行聚合操作,可以在特定的窗口范围内进行计算。
    • 语法示例:SELECT column, SUM(column) OVER (PARTITION BY partition_column ORDER BY order_column) FROM table;
  5. 子查询:
    • 子查询是嵌套在主查询中的查询,通常用于过滤、排序、或用作计算字段的值。
    • 可以用于SELECT语句的FROM、WHERE、HAVING子句中。
    • 语法示例:SELECT column FROM table WHERE column = (SELECT column FROM another_table WHERE condition);
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇