网站建设及运维方案wordpress显示中文乱码

pingmian/2025/10/8 3:49:21/文章来源:
网站建设及运维方案,wordpress显示中文乱码,wordpress 侧边栏左边,手机网站开发目的前言 本文适合有一定基础的进行快速简单回顾复习。 对于现如今的无论哪一类软件或应用#xff0c;都几乎无法离开数据库#xff0c;常见使用的关系性数据库如MySQL、Oracle#xff0c;非关系性数据库如MongoDB、Redis等。而MySQL数据库则是软件开发中最常用的数据库之一都几乎无法离开数据库常见使用的关系性数据库如MySQL、Oracle非关系性数据库如MongoDB、Redis等。而MySQL数据库则是软件开发中最常用的数据库之一熟练掌握SQL语言还是非常重要的对于某些岗位来说可能并没有经常使用虽然简单但是太久没用还是会有所遗忘所以在此进行一定的回顾。本篇文章主要介绍MySQL不过大部分语句在Oracle、SQL Server、PostgreSQL等数据库上同样适用。 首先对于SQL可以基本分为以下几种分类 数据定义语言 (Data Definition Language, DDL) 这些语句负责管理和定义数据库的基础数据如数据库、表、索引和视图等。主要的语句关键字包括create、drop和alter等 数据操作语言 (Data Manipulation Language, DML) 这些语句可以执行数据的插入、删除、更新和查询操作。主要的语句关键字有 insert、delete、update等 数据查询语言 (Data Query Language, DQL 即最常用的select语句 数据控制语言 (Data Control Language, DCL) 这些语句用于控制对数据库中数据段的访问权限和安全级别。主要的语句关键字包括grant、revoke、commit和rollback等 便于回顾与使用本文使用的数据库表是网上找的三张表departments、employees、job_history分别定义了 departments部门表部门号deptno、部门名dname、部门经理号managerno、部门位置locemployees员工表员工号empno、姓名name、部门号deptno、邮箱email、雇用日期hiredate、薪水salaryjob_history历史工作记录表员工号empno、开始时间start_date、结束时间end_date、部门deptno 执行语句如下 -- 删除表防止有这几张表没有可不要 DROP TABLE job_history; DROP TABLE employees; DROP TABLE departments; -- 创建部门表 CREATE TABLE departments (deptno INT PRIMARY KEY,dname VARCHAR ( 12 ) NOT NULL,managerno INT, loc VARCHAR ( 10 ) ); -- 向部门表中插入记录 INSERT INTO departments VALUES( 1, 开发部, 2, 一楼 ); INSERT INTO departments VALUES( 2, 测试部, 3, 二楼 ); INSERT INTO departments VALUES( 3, 销售部, 8, 一楼 ); INSERT INTO departments VALUES( 4, 新业务部, NULL, 二楼 ); -- 创建员工表 CREATE TABLE employees (empno INT PRIMARY KEY,NAME CHAR ( 10 ) NOT NULL,deptno INT,email VARCHAR ( 20 ),hiredate date,salary NUMERIC ( 8, 2 ) DEFAULT 8000.00,FOREIGN KEY ( deptno ) REFERENCES departments ( deptno ) ); -- 向员工表中插入记录 INSERT INTO employees VALUES( 1, 周福生, NULL, zhougmail.com, 2000-12-02, 90000.00 ); INSERT INTO employees VALUES( 2, 王五, 1, wangsugmail.com, 2013-01-03, 9100.00 ); INSERT INTO employees VALUES( 3, 李四, 2, lisiqq.com, 2021-02-10, 13900.00 ); INSERT INTO employees VALUES( 4, 赵六, 1, zhaoliuqq.com, 2022-12-1, 15000.00 ); INSERT INTO employees VALUES( 5, 李明, 1, limingqq.com, 2004-09-11, 25200.00 ); INSERT INTO employees VALUES( 6, 孙军, 2, sunjun163.com, 2016-05-22, 9700.00 ); INSERT INTO employees VALUES( 7, 钱杰, 3, qianjieoutlook.com, 2013-07-22, 8900.00 ); INSERT INTO employees VALUES( 8, 程娟, 3, chengjuangmail.com, 2013-07-22, 14900.00 ); INSERT INTO employees VALUES( 9, 赵卫华, 1, zhaoweihuagmail.com, 2009-11-12, 21900.00 ); -- 创建岗位历史表 CREATE TABLE job_history (empno INT,start_date date,end_date date,deptno INT,PRIMARY KEY ( empno, start_date ), FOREIGN KEY ( empno ) REFERENCES employees ( empno ) ); -- 向岗位历史表中插入数据 INSERT INTO job_history VALUES( 2, 2013-01-03, 2015-12-31, 3 ); INSERT INTO job_history VALUES( 2, 2016-01-01, 2018-12-31, 2 ); INSERT INTO job_history VALUES( 3, 2015-01-01, 2017-12-31, 2 ); INSERT INTO job_history VALUES( 4, 2010-01-01, 2015-12-31, 1 ); INSERT INTO job_history VALUES( 5, 2015-06-30, 2016-12-31, 2 ); INSERT INTO job_history VALUES( 9, 2009-11-12, 2010-12-31, 1 ); COMMIT; 一、基础语法 CREATE TABLE  创建表 CREATE TABLE 表名 { 列名 数据类型 } create table departments(deptno int primary key,dname varchar(12) not null,managerno int,loc varchar(10) ); 附常用数据类型 数据类型描述char(size)保存固定长度的字符串最大长度sizevarchar(size)保存可变长度的字符串最大长度size若值大于255则将被转换为TEXT类型tinytext最大长度2^8-1的字符串text最大长度2^16-1的字符串mediumtext最大长度2^24-1字符的字符串longtext最大长度2^32-1字符的字符串tinyint整数型有符号(-2^7,2^7)无符号(0,2^8)smallint整数型有符号(-2^15,2^15)无符号(0,2^16)mediumint整数型有符号(-2^23,2^23)无符号(0,2^24)int / interger整数型有符号(-2^31,2^31)无符号(0,2^32)bigint整数型有符号(-2^63,2^63)无符号(0,2^64)bool布尔类型只有 true 和 false 两个有效值零值被认为是 false非零值被认为是 true。MySQL 并不真正支持 bool 类型bool 是 TINYINT(1) 的别名。float(size,d)单精度浮点数最大长度为size小数点后d位超过d位会被四舍五入double(size,d)双精度浮点数最大长度为size小数点后d位超过d位会被四舍五入decimal(size,d) 定点数类型最大长度为size小数点后d位超过d位会被四舍五 MySQL 用 4 个字节存储 FLOAT 类型数据用 8 个字节来存储 DOUBLE 类型数据。无论哪个都是采用二进制的方式来进行存储的如果尾数不是0或5就无法用二进制精准表达需要使用定点数 date日期类型格式为 YYYY-MM-DD取值范围从 1000-01-01 到 9999-12-31time时间类型格式为HH:MM:SS,取值范围从 -838:59:59 到 838:59:59datetime日期时间类型格式为 YYYY-MM-DD HH:MM:SS取值范围从 1000-01-01 00:00:00 到 9999-12-31 23:59:59 SELECT  查询数据 SELECT 列名称 FROM 表名称 -- 查询全部字段但是一般使用具体字段名若有%和空格等特殊符号需要用括起来 SELECT * FROM employees; SELECT empno,name,salary FROM employees; SELECT empno,name,salary,salary*121000 AS annual_salary FROM employees; SELECT name 姓名,salary 薪水, salary*12 年薪% FROM employees; WHERE  条件过滤 从表里选择数据进行操作时可以使用WHERE进行条件过滤例如进行查询记录或更新记录等语法为 SELECT 列名称 FROM 表名称 WHERE 条件 -- where后加上查询条件 SELECT name,salary,hiredate FROM employees WHERE hiredate 2020/01/01; SELECT name,salary,hiredate FROM employees WHERE deptno ! 3;DISTINCT  去除重复值 对于一张表的某些列存在多个重复值时可以使用DISTINCT进行去冲显示只需要加在列名称之前语法 SELECT DISTINCT 列名称 FROM 表名称 -- 使用DISTINCT关键字可以去重复值 SELECT DISTINCT deptno FROM employees; SELECT DISTINCT empno FROM job_history; AND/OR/NOT  和或运算符 若WHERE子句中有需要过滤多个条件则可以使用AND或OR将条件进行连接。条件1和条件2都满足则使用AND条件1或条件2满足其一即可则使用OR很好理解。NOT就表示不即相反。不等于的运算符可以是!或都可以。 -- OR AND NOT 的用法 SELECT * FROM employees WHERE deptno 3; SELECT * FROM employees WHERE deptno 3 AND salary 10000; SELECT * FROM employees WHERE deptno 3 OR salary 10000;-- AND的优先级大于OR SELECT * FROM employees WHERE deptno 3 OR salary 10000 AND hiredate 2015-01-01; SELECT * FROM employees WHERE deptno 3 OR (salary 10000 AND hiredate 2015-01-01);-- NOT的用法 SELECT * FROM employees WHERE deptno 3 OR salary 10000; SELECT * FROM employees WHERE NOT (deptno 3 OR salary 10000); SELECT * FROM employees WHERE deptno ! 3 AND salary 10000;INSERT  插入数据 INSERT INTO 表名称 VALUES (值1,值2,值3……) INSERT INTO 表名称(列1,列2……) VALUES(值1,值2……) -- 向部门表中插入记录 按表字段顺序 INSERT INTO departments VALUES ( 1, 开发部, 2, 一楼 ); INSERT INTO departments VALUES ( 2, 测试部, 3, 二楼 ); -- 也可以指定需要插入数据的列名 INSERt INTO departments(deptno,dname,loc) VALUES (3, 销售部, 三楼); UPDATE  更新数据 UPDATE顾名思义主要用来更新表的数据即修改表数据。 UPDATE 表名称 SET 列名称 更改后的值 WHERE 列名称 某值 -- UPDATE更新单个数据 SELECT * FROM employees WHERE empno 3; UPDATE employees SET deptno 3 WHERE empno 3; SELECT * FROM employees WHERE empno 3; -- UPDATE更新多个数据 SELECT * FROM employees WHERE empno 3; UPDATE employees SET deptno 2,salary salary 1000 WHERE empno 3; SELECT * FROM employees WHERE empno 3; -- 更新数据为默认值 SELECT * FROM employees WHERE empno 3; UPDATE employees SET salary DEFAULT WHERE empno 3; SELECT * FROM employees WHERE empno 3;-- UPDATE中使用子查询 SELECT * FROM employees WHERE deptno (SELECT deptno FROM departments WHERE managerno 2); UPDATE employees SET salary salary 100 WHERE deptno (SELECT deptno FROM departments WHERE managerno 2); SELECT * FROM employees WHERE deptno (SELECT deptno FROM departments WHERE managerno 2); DELETE  删除数据 DELETE是用于删除表中的行项目语法 DELETE FROM 表名称 WHERE 列名称 值当然也可以不加WHERE条件那这样就是删除表的所有行数据内容不删除定义也不释放空间表的结构、属性和索引都还是完整的。如果使用DELETE删除所有表数据再向表中新增3条数据id将从之前的id继续进行递增就有可能看到表中id是不连续的。 -- DELETE的用法 SELECT * FROM employees; INSERT INTO employees(empno,name,salary) VALUES(11,test,9999); SELECT * FROM employees; DELETE FROM employees WHERE empno 11; SELECT * FROM employees;-- DELETE中使用子查询 SELECT * FROM departments; SELECT * FROM employees WHERE deptno IN (SELECT deptno FROM departments WHERE loc 二楼); DELETE FROM employees WHERE deptno IN (SELECT deptno FROM departments WHERE loc 二楼);TRUNCATE TABLE  删除表数据 TRUNCATE也是删除表数据TRUNCATE TABLE DELETE FROM TABLE 但是TRUNCAT的效率更高DELETE是一条条收回/删除TRUNCAT是整张表收回/删除。并且TRUNCATE是会删除内容和释放空间的不删除定义如果使用TRUNCATE删除表数据后再向表中新增3条数据那么这三条数据的id将分别重新定义为1、2、3这体现其释放空间的特性。但是需要注意使用TRUNCATE是无法删除行数据的只能清空整张表数据。TRUNCATE也不会触发任何DELETE触发器。 -- TRUNCATE TABLE DELETE FROM TABLE TRUNCATE TABLE DELETE FROM TABLE DROP TABLE  删除表 DROP TABLE可以理解为真·删除表它会删除表数据和定义、释放空间删除后这个表的所有东西都没有了。删除程度DROP TRUNCATE DELETE -- DROP TABLE 就是DROP 表名称 就能删除 DROP TABLE 二、进阶条件及多表连接 LIKE  匹配字符条件 LIKE操作符可以在WHERE条件中对列进行指定的匹配例如搜索所有姓李的员工就可以使用LIKE当然如果是NOT LIKE也可以筛选出所有不姓李的员工。 -- LIKE的用法,%表示任意长度字符_表示一个字符长度 SELECT * FROM employees WHERE name LIKE 李%; SELECT * FROM employees WHERE name LIKE %卫%; SELECT * FROM employees WHERE email LIKE __a%; SELECT * FROM employees WHERE email LIKE %qq.com;IN  范围值条件 IN操作符就是可以使WHERE条件中存在多个值例如选取员工号empno为3、5、6的员工示例的前两句的执行结果是相同的。 -- IN的用法 SELECT name, empno FROM employees WHERE empno 3 OR empno 5 OR empno 6; SELECT name, empno FROM employees WHERE empno IN (3,5,6); SELECT name, empno FROM employees WHERE empno NOT IN (3,5,6); -- 当子查询有多行时需要用IN SELECT * FROM employees WHERE deptno IN (SELECT deptno FROM departments WHERE managerno 2 OR managerno 3); BETWEEN AND  数据区间条件 BETWEEN AND用于选择介于两个值之间的范围常用在日期或数值上例如查找2023年入职的员工就可以使用hiredate BETWEEN 2013-01-01 AND 2013-12-31 -- BETWEEN的用法 SELECT name,hiredate FROM employees WHERE hiredate 2013-01-01 AND hiredate 2013-12-31; SELECT name,hiredate FROM employees WHERE hiredate BETWEEN 2013-01-01 AND 2013-12-31; SELECT name,hiredate FROM employees WHERE hiredate NOT BETWEEN 2013-01-01 AND 2013-12-31;ORDER BY  排序 ORDER BY用于对筛选结果进行排序默认是ASC升序如果需要使用降序要指定DESC关键字且支持对多个字段进行排序只需要在句子后加上ORDER BY 列1,列2 DESC就会按列1升序和列2降序进行排列。 -- ORDER BY的用法默认为ASC升序加上DESC则为降序可以使用别名进行排序 SELECT name,salary FROM employees ORDER BY salary; SELECT name,salary FROM employees ORDER BY salary ASC; SELECT name,salary FROM employees ORDER BY salary DESC; -- 使用多个字段进行排序同样可以使用ASC和DESC SELECT name,deptno,salary FROM employees ORDER BY deptno,salary; SELECT name,deptno,salary FROM employees ORDER BY deptno DESC,salary ASC;GROUP BY  分组 GROUP BY用于根据一个或者多个列进行分组如果同时需要分组和排序注意需要先GROUP BY再ORDER BY否则会错误提示。例如示例为按照部门分组筛选各部门的最高工资、最低工资等数据。 -- GROUP BY的用法 SELECT deptno,MAX( salary ) AS 最高工资,MIN( salary ) AS 最低工资,SUM( salary ) AS 汇总工资,CAST(AVG( salary ) AS DECIMAL ( 10, 2 )) AS 平均工资2位小数,COUNT(*) AS 员工数 FROM employees WHERE hiredate 2010-01-01 GROUP BY deptno ORDER BY 平均工资2位小数; AS  别名 在使用SELECT进行查询的时候为列和表指定别名可以令列的输出名称更易读使表的使用更便捷等。在使用AS的时候也可以隐藏直接SELECT 列名称 别名 FROM 表。 -- AS的使用 指定输出列名 SELECT empno AS 员工号,salary 月薪, salary*14 14薪 FROM employees; -- AS的使用 指定表的别名 SELECT name,dname,e.deptno FROM employees AS e,departments d WHERE e.deptno d.deptno;JOIN  多表连接 通常每张数据库表都会存储与其定义相关的内容但是在业务中我们所需的数据经常都无法从一张表里就取出我们需要连接两张表甚至更多表来获取想要的数据这时候就需要使用JOIN进行表连接。表连接有多种INNER JOIN内连接、LEFT JOIN左连接、RIGHT JOIN右连接、FULL JOIN全连接不过MySQL不支持FULL JOIN等而内连接INNER JOIN我们也常省略INNER写作JOIN。 -- 传统的多表连接 SELECT name,dname FROM employees,departments WHERE employees.deptno departments.deptno; SELECT * FROM employees,departments WHERE employees.deptno departments.deptno;-- 直接从两表取所有的数得到的数据量会是两个表相乘的数量 SELECT * FROM employees,departments;-- 两个表的重名字段deptno会报错需要指定表名,常用的也有使用表的别名 SELECT name,dname,employees.deptno FROM employees,departments WHERE employees.deptno departments.deptno; SELECT name,dname,e.deptno FROM employees e,departments d WHERE e.deptno d.deptno;-- 三个表的连接 SELECT job_history.*,employees.name,departments.dname FROM job_history,employees,departments WHERE job_history.empno employees.empno AND job_history.deptno departments.deptno;INNER JOIN 内连接 -- INNER JOIN内连接 SELECT name,dname,e.deptno FROM employees e,departments d WHERE e.deptno d.deptno;-- JOIN的方式有多种默认采用的就是INNER JOIN所以可以省略 SELECT name,dname,e.deptno FROM employees e INNER JOIN departments d ON e.deptno d.deptno; SELECT name,dname,e.deptno FROM employees e JOIN departments d ON e.deptno d.deptno; 内连接可以连接自身但是需要用到刚才提到的AS别名将一张表分别取为两个别名这样就能进行自连接查询数据使用场景在这个数据库中可以例如查询同名的员工或在同一个部门共事过的员工 -- 查询同名的员工 -- INSERT INTO employees(empno,name,deptno) VALUES(11,刘德华,5); SELECT e1.empno,e1.name FROM employees e1 JOIN employees e2 ON e1.name e2.name AND e1.empno ! e2.empno ORDER BY e1.empno; -- 查询在同一个部门共事过的员工 SELECT j1.empno,j2.empno,j1.deptno,j1.start_date comm_start FROM job_history j1 JOIN job_history j2 ON j1.deptno j2.deptno AND j1.empno ! j2.empno AND j1.start_date BETWEEN j2.start_date AND j2.end_date; 外连接 -- 内连接 INNER JOIN 两边符合条件 SELECT e.empno,name,dname,e.deptno FROM employees e JOIN departments d ON e.deptno d.deptno; -- 左连接 LEFT JOIN 以左侧表为主右侧表与其相匹配匹配不上的记录 以null 做替补 SELECT e.empno,name,dname,e.deptno FROM employees e LEFT JOIN departments d ON e.deptno d.deptno; -- 右连接 RIGHT JOIN 以右侧表为主左侧表与其相匹配匹配不上得记录以null做替补 SELECT e.empno,name,dname,d.deptno FROM employees e RIGHT JOIN departments d ON e.deptno d.deptno; -- 全连接 FULL JOINMySQL和SQLite不支持FULL JOIN SELECT e.empno,name,dname,d.deptno FROM employees e FULL JOIN departments d ON e.deptno d.deptno; -- 三表进行左外连接 SELECT e.name,e.deptno,d.managerno,j.deptno FROM employees e LEFT JOIN departments d ON e.deptno d.deptno LEFT JOIN job_history j ON e.empno j.empno AND e.deptno ! j.deptno;-- 连接查询时如果是同名字段作为连接条件using可以代替on出现提高查询效率 -- USING是针对同名字段using(id) on A.idB.id -- 例如左连接中可改写为USING (deptno); 交叉连接 CROSS JOIN -- CROSS JOIN交叉连接 -- 相当于两个表的笛卡尔积等于两个表的记录数相乘 -- 表1有4条记录表2有5条记录交叉连接后有20条数据 SELECT * FROM employees CROSS JOIN departments; SELECT * FROM employees,departments; UNION  集合 UNION主要是用来两个或多个SELECT语句的结果。UNION会选择不同的值如果查询的记录中有重复的值需要使用UNION ALL。注意使用UNION列数必须相同且对应列的属性也相同 -- UNION集合 UNION显示不重复的UNION ALL重复的也会显示 -- 使用UNION列数必须相同且对应列的属性也相同 SELECT empno,deptno FROM employees; SELECT managerno,deptno FROM departments;SELECT empno,deptno FROM employees UNION SELECT managerno,deptno FROM departments;SELECT empno,deptno FROM employees UNION ALL SELECT managerno,deptno FROM departments;-- UNION的使用场景筛选高、中、低三个工资档位的员工不过一般也不会写这么复杂的三句查询 SELECT name,salary,低薪 AS 工资档次 FROM employees WHERE salary 10000 UNION SELECT name,salary,中薪 AS 工资档次 FROM employees WHERE salary BETWEEN 10000 AND 20000 UNION SELECT name,salary,高薪 AS 工资档次 FROM employees WHERE salary 20000-- INTERSECT 取出两个表不同的部分不过mysql不支持INTERSECT SELECT empno,deptno FROM employees INTERSECT select managerno,deptno FROM departments; HAVING  句尾条件过滤 HAVING的效果和WHERE差不多都是进行条件过滤的只不过WHERE无法和聚合函数一起使用因为SQL会先执行WHERE再执行GROUP BY需要理解下他们的语法及执行顺序。 -- HAVING过滤分组类似于WHERE -- 但是执行在GROUP BY之后需要HAVING的条件字段或聚合函数需要在SELECT中出现 SELECT deptno,AVG(salary) 平均工资 FROM employees GROUP BY deptno; -- 下面这个执行会报错因为此时还没有平均工资这一列它先执行where再来执行GROUP BY -- SELECT deptno,AVG(salary) 平均工资 FROM employees -- WHERE 平均工资 10000 GROUP BY deptno; -- 需要改写为 SELECT deptno,AVG(salary) 平均工资 FROM employees GROUP BY deptno HAVING 平均工资 10000; NULL  空值 NULL是空值某个值显示为空不一定等于NULL在创建表时如果在某个字段后加上NOT NULL则表示强制该列不接受空值若为空则为提示错误。NULL也是一个条件但是在使用的时候需要用IS NULL或IS NOT NULL来进行过滤而不能使用 NULL。 -- NULL空值为空不等于NULL判断一个值为NULL要用IS NULL -- 在MySQL和SQL Server为NULL时会显示NULL而在Oracle和PostgreSQL会显示空 SELECT 1 WHERE NULL IS NULL; SELECT 1 WHERE NULL IS NOT NULL; SELECT 1 WHERE IS NOT NULL; 在数据中存在NULL时往往需要特别注意如果这个列中存在NULL值用这列去比较的时候有可能会出现问题。 -- 假设需要查询没有员工的部门 -- 下面语句因为e.deptno中存在空值所以用d.deptno去比较的话会比不出来 SELECT deptno,dname from departments d WHERE d.deptno NOT IN (SELECT e.deptno FROM employees e); -- 因此需要改写为 -- 方法一 SELECT deptno,dname FROM departments WHERE departments.deptno NOT IN (SELECT employees.deptno FROM employees WHERE employees.deptno IS NOT NULL); -- 方法二 SELECT deptno,dname FROM departments WHERE NOT EXISTS (SELECT 1 FROM employees WHERE departments.deptno employees.deptno); -- 方法二不一定好理解在这里解释一下 -- 外层查询SELECT deptno, dname FROM departments -- 这是外层查询从departments表中选择部门号deptno和部门名称dname。 -- 内层查询SELECT 1 FROM employees WHERE departments.deptno employees.deptno -- 这是内层查询它用于检查是否存在与外层查询结果中的部门号相匹配的记录。如果存在匹配的记录将返回1否则返回空。 -- 条件WHERE NOT EXISTS -- 这是外层查询的条件子句它使用了NOT EXISTS来判断内层查询的结果是否为空。如果内层查询的结果为空表示在employees表中不存在与外层查询结果中的部门号相匹配的记录。 VIEW  视图 视图简单来说也可以理解为对SQL语句的结果集的可视化表视图中的数据来自一个活多个真实表且视图本身不保存数据。我们可以像查询一个表一样来查询视图查询视图时数据库也是通过执行创建视图时的那些SQL语句来返回结果并且如果那些真实表中的数据更改视图的数据也会进行更改视图显示的是当前的数据因此如果更新一些简单的视图没有集合、没有DISTINCT、没有聚合函数、没有GROUP BY、没有多表连接表中的数据也会被更改。 -- 视图的用法筛选所有的部门经理的员工信息视图 CREATE VIEW emp AS (SELECT * FROM employees WHERE empno IN (SELECT managerno FROM departments)) CASE WHEN表达式 当具有多个条件进行匹配的时候也常用到CASE WHEN表达式 -- 方法一 -- CASE 字段 -- WHEN 值 THEN 结果 SELECT empno,deptno, CASE deptnoWHEN 1 THEN 开发部WHEN 2 THEN 测试部WHEN 3 THEN 销售部ELSE 其他部门 END deptname FROM employees; -- 方法二 -- CASE -- WHEN 字段 值 THEN 结果 SELECT empno,deptno, CASEWHEN deptno 1 THEN 开发部WHEN deptno 2 THEN 测试部WHEN deptno 3 THEN 销售部ELSE 其他部门 END deptname FROM employees;-- 之前在UNION中讲到的使用UNION连接三个SELECT语句就可以改写为 SELECT name,salary, CASEWHEN salary 10000 THEN 低薪WHEN salary BETWEEN 10000 AND 20000 THEN 中等ELSE 高薪 END 工资档次 FROM employees ORDER BY salary; ALL /ANY 关键字 很好理解ALL表示所有ANY代表任何在一些最大最小值的时候常用到 -- ALL关键字 俩俩分别表示同一结果 SELECT name FROM employees WHERE salary (SELECT MAX(salary) FROM employees WHERE deptno 1); SELECT name FROM employees WHERE salary ALL (SELECT salary FROM employees WHERE deptno 1);SELECT empno,name FROM employees WHERE empno NOT IN (SELECT managerno FROM departments WHERE managerno IS NOT NULL); SELECT empno,name FROM employees WHERE empno ! ALL (SELECT managerno FROM departments WHERE managerno IS NOT NULL); -- ANY关键字 俩俩分别表示同一结果 SELECT empno,name FROM employees WHERE salary (SELECT MAX(salary) FROM employees WHERE deptno 2); SELECT empno,name FROM employees WHERE salary ANY (SELECT salary FROM employees WHERE deptno 2);SELECT name FROM employees WHERE empno IN (SELECT DISTINCT managerno FROM departments); SELECT name FROM employees WHERE empno ANY (SELECT DISTINCT managerno FROM departments); EXISTS运算符 EXISTS即存在的意思和IN是类似的考虑执行效率时如果子查询记录多适合使用EXISTS如果主查询记录多适合使用IN。 SELECT name FROM employees WHERE empno IN (SELECT DISTINCT empno FROM job_history); SELECT name FROM employees WHERE EXISTS (SELECT empno FROM job_history WHERE employees.empno job_history.empno);SELECT name FROM employees WHERE empno NOT IN (SELECT DISTINCT empno FROM job_history); SELECT name FROM employees WHERE NOT EXISTS (SELECT empno FROM job_history WHERE employees.empno job_history.empno); 三、常用聚合函数 MAX  最大值 返回该列中的最大值也可用于文本将按字母顺序进行排列大小NULL不会被用于计算。 语法为SELECT MAX(列名) FROM 表名; SELECT MAX( salary ) AS 最高工资 FROM employees; MIN  最小值 返回该列中的最小值也可用于文本将按字母顺序进行排列大小NULL不会被用于计算。 语法为SELECT MIN(列名) FROM 表名; SELECT MIN( salary ) AS 最低工资 FROM employees; SUM  求和 返回该列数值的总和。 语法为SELECT SUM(列名) FROM 表名; SELECT SUM( salary ) AS 汇总工资 FROM employees; AVG  平均值 返回该列数值的平均值NULL不会被用于计算。 语法为SELECT AVG(列名) FROM 表名; SELECT AVG( salary ) AS 平均工资 FROM employees; COUNT  计数 返回指定条件的行数量。 语法为SELECT COUNT(列名) FROM 表名; SELECT COUNT(*) AS 员工数 FROM employees SELECT COUNT(deptno) AS 部门数 FROM employees; SELECT COUNT(DISTINCT deptno) AS 部门数 FROM employees; CAST  数值类型转换 在进行一些计算的时候有可能会需要数值类型转换例如下面例子中计算所有人的平均工资如果不进行数值转换则会有多位小数显然是不满足工资2位小数的实际业务需求。 语法CAST(列名 AS 数据类型) SELECT CAST(AVG(salary) AS DECIMAL(10,2)) AS 平均工资2位小数 FROM employees; 附一些数据类型 值描述DATE日期格式为 YYYY-MM-DD.DATETIME日期加具体的时间格式为 YYYY-MM-DD HH:MM:SS.TIME时间格式为 HH:MM:SS.CHAR字符型SIGNEDintUNSIGNED无符号intBINARY二进制型DECIMALfloat型 总结 关于数据库方面还有很多内容可以写以上只是基础使用和语法有空了再继续进行学习分享和记录。 仅为个人记录如有错误请指正感谢

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

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

相关文章

网站做贸易用什么色调比较好百度安装应用

Julia 基本语法 Julia 是一种为高性能数值计算设计的动态编程语言。它结合了其他编程语言的优点,如 Python 的易用性和 C 的性能。Julia 的语法简洁明了,使得编写和理解代码都变得容易。本文将介绍 Julia 的基本语法,帮助读者快速入门。 变量和数据类型 在 Julia 中,变量…

网站的安全怎么做网络营销方式思维导图

熟悉C语言的人都知道,虽然C语言是一门高级语言,拥有很多高级语言的特性,但是作为一种由低级语言到高级的过渡,他又继承了很多低级语言的特性,那就是可以直接操作计算机的硬件设备。本人近日在学习有关PLC网络方面的知识…

贺州做网站哪家公司网站服务器申请

生成式人工智能研究焦点:揭秘基于扩散的模型 文章目录 生成式人工智能研究焦点:揭秘基于扩散的模型去噪扩散是什么让扩散发挥作用?采样生成图像的设计选择以更少的步骤理顺流程在低噪音水平下步骤高阶求解器可实现更准确的步骤训练降噪器的设…

安亭公司网站建设国内消息最新新闻

js开发的web应用和php/Java最大的区别就是js可以通过查看源代码的方式查看到编写的代码,但是php/Java的不能看到,也就是说js开发的web网页相当于可以进行白盒测试。 流行的js框架有: 1. AngularJS 2. React JS 3. Vue 4. jQuery 5. Backbone…

机床网站建设俄罗斯最新消息

一、模块题目 二、原理图 1、数码管

沧县做网站资源wordpress

[Submit][Status][Discuss]Description 请写一个程序,要求维护一个数列,支持以下 6 种操作:请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列…

盱眙建设局网站乐山网站建设流程

【Unity的URP渲染管线下的TAA抗锯齿】 背景:1. Unity内置的抗锯齿只能够满足部分画面需求。展示一个锯齿示例。2. 在75寸大屏电视上跑通展示一个锯齿示例。- 在Camera上配置3. 安装了一个TAA组建,最后打包APK在安卓机上运行报错。- 经过测试排查,发现是没有将后处理的shader…

外贸网站建设哪家公司好青岛市住房城乡建设局网站

本文旨在以最小的篇幅,最少的信息,介绍最高频使用的内容,从而掌握C编程开发的能力。 这种能力,只是语法层面,不涉及具体的函数库,基础库等内容。 能力准备:需要C语言基础。基本的if else, whi…

个人网站空间价格怎样提高网站权重

简介学习地址: https://meyerweb.com/eric/tools/css/reset/重置样式表的目的是减少浏览器在默认行高,标题的边距和字体大小等方面的不一致。重置样式特意是非常通用的/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126License: none (publ…

广州网站(建设信科网络)可视化编辑建站平台

1.定义结构体数组存储5个学生的信息:姓名,年龄,性别 定义函数实现输入,要求形参使用结构体指针接收 函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息) 定义函数实现输出,要求形参使用结构体…

网站建设 三乐建站之星官网 discuz

微软开源的 云原生应用开发的框架 Dapr 发布了1.0 版本《Dapr 正式发布 1.0》,云原生应用开发更加简单容易,Dapr 的容器编排环境也是用的Kubernetes。过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、…

沧州北京网站建设wordpress服務器

网络的基本概念 1.协议1.1 协议的基本概念1.2 常见的协议 2.分层模型2.1网络七层OSI 7层模型:物数网传会表应(口诀)2.2TCP/IP模型2.3数据通信的过程2.4网络的设计模式2.5以太网帧的格式 3.SOCKET编程3.1网络字节序3.2 相关结构体和函数3.3 代码实现 1.协议 1.1 协议…

wordpress商店插件优化神马网站关键词排名价格

目录 1 计算机网络的拓扑结构1.1 网络拓扑的概念1.2 通信子网的信道类型1、点到点式网络2、广播式网络 1.3 常见的计算机网络拓扑结构 2 网络协议和标准化组织2.1 网络协议2.2 标准化组织 1 计算机网络的拓扑结构 1.1 网络拓扑的概念 拓扑学由图论演变而来,在拓扑…

做网站还需要买空间吗怎么修改wordpress 字体

众所周知,Google play商店在全球是极具影响力的应用市场之一,随着市场和科学技术的发展,竞争越来越激烈,谷歌的政策也越来越严格。 为了维持良好的竞争环境和用户体验,谷歌不断更新政策和规则,同时加强对部…

辽宁省建设银行网站淮南市官网

开发过程中经常会黑窗口中手动测试一下计划请求的目标ip和端口是否通畅,测试方式如下: 一、单纯测试ip是否能够 ping 通,这个比较熟悉了,运行 cmd 打开黑窗口 输入如下指令,能够如下提示信息,表示端口是通…

网站建设前需求调研表网站模板之家免费模板

目录 一、问题描述二、使用EasyExcel的版本三、场景复现四、问题修复 一、问题描述 使用EasyExcel读取文件数据时&#xff0c;出现数据无法读取情况。 二、使用EasyExcel的版本 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel&l…

网站排名提升易下拉教程网站开发网站模板设计

学生党一枚&#xff0c;前段时间跟着导师做的项目因为上面用到USB转串口芯片FT232R迟迟买不到&#xff0c;所以打算更换成国产USB转串口芯片CH340&#xff0c;对CH340的认识也很早了&#xff0c;很多年前开始直到现在各种开发板上基本都会标配一颗CH340&#xff0c;像某宝上的S…

免费做试用的网站商河县建设局网站

主要说一下冒泡排序的一些关键地方的个人理解&#xff0c;比如算法思想&#xff0c;两个循环的作用意义&#xff0c;中间循环变量范围的确定等。 原理&#xff1a;比较两个相邻的元素&#xff0c;将值大的元素交换至右端。思路&#xff1a;依次比较相邻的两个数&#xff0c;将小…

旅行社网站建设需求分析临沂网站设计

描述 在 Spring Boot 中实现状态机&#xff0c;通常使用 Spring State Machine 框架进行实现。该框架可以帮助我们定义、创建和管理复杂的状态机。 接下来给出一个demo&#xff0c;说明如何使用 Spring State Machine 框架实现状态机。 假设我们需要实现一个简单的订单状态机&a…

网站首页收录突然没有了html网站自带字体怎么做

题目&#xff1a;输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 程序分析&#xff1a; &#xff08;1&#xff09;最小公倍数输入的两个数之积除于它们的最大公约数&#xff0c;关键是求出最大公约数&#xff1b; &#xff08;2&#xff09;求最大公约数用辗…