DAY01-mysql加强

DAY01-mysql加强,第1张

SQL语言按照实现的功能不同,主要分为3类:数据 *** 纵语言(DML),数据定义语言(DDL),数据控制语言(DCL)。

DISTINCT 关键字可以用于一列,也可以用于多列。

只有当job 和 deptno中的一条数据重复,才认为是重复的数据。

SELECT DISTINCT DEPTNO,JOB FROM emp

对 NUMBER 型数据 使用(+ - * /)算数 *** 作符创建表达式;

对 DATE 型数据使用(+ -)算数 *** 作符创建表达式。

-- 查询所有员工的年薪(使用别名) SELECT SAL*12 AS SALOFYEAR FROM emp

演示:

SELECT * FROM dept WHERE BINARY DNAME = 'sales'

= &!= &<>&>&>= &<&<=

BETWEEN ... AND ...:在两值之间,闭区间包含

-- 查询工资在 2000-3000 之间的员工信息 SELECT * FROM emp WHERE SAL BETWEEN 2000 AND 3000

IN:匹配列出的值;如:IN(1, 2, 3, 4)

-- 查询工资为 800 或 1600 或 3000 的员工 SELECT * FROM emp WHERE SAL IN (800,1600,3000)

LIKE :匹配字符串模式 如:_ (占位符一个字符)、%(通配符多个字符)

-- 根据关键字模糊查询(员工名称和职位)根据sal 值查询 sal=800

SELECT * FROM emp WHERE (ENAME LIKE '%S%' OR JOB LIKE '%C%') AND SAL = 800 注意括号

IS NULL:是否为空

空值不等于零或空格,也不表示空字符串,也就是没有值

任何类型的字段都可以允许空值作为值的存在

包括空值的任何算术表达式都等于空

函数 IFNULL(expr1, expr2),若 expr1 不是 NULL,IFNULL() 返回expr1,否则它返回expr2

-- 查询所有员工的年薪((月薪 + 奖金) * 12)

SELECT (SAL + IFNULL(COMM,0)) * 12 FROM emp

AND:如果组合的条件都是 true,返回 true;

OR: 之一是 true ,返回 true;

NOT:如果下面的条件是 false,返回 true。

优先级规则:比较运算符 >NOT >AND >OR。

ASC:升序,缺省

DESC:降序

ORDER BY :其子句出现在 SELECT 语句后执行,

可以使用别名,但不能使用加了引号的别名或列名来排序,没有效果

需要查询的数据分散在多张表中,只有联合多张表才能查询出期望的数据

其意思:在数学中,假设集合 A = {a, b},集合 B = {0, 1, 2},则两个集合的笛卡尔积为 {(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

解决方案:在WHERE加入有效的连接条件 ---->等值连接,注意:连接 n 张表,至少需要n - 1个连接条件。

SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,…]

FROM 表名称 [别名], [表名称 [别名] ,…]

[WHERE 条件(S)/等值连接]

[ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]]

可读性高

SELECT table1.column, table2.column

FROMtable1 [INNER] JOIN table2 ON table1.column1 = table2.column2

WHERE 条件

解决什么:

SELECT table1.column, table2.column

FROMtable1 LEFT [OUTER] JOIN table2 ON table1.column1 = table2.column2

WHERE 条件

SELECT table1.column, table2.column

FROMtable1 RIGHT [OUTER] JOIN table2 ON(table1.column1 = table2.column2)

WHERE 条件

SELECT emp.EMPNO, emp.ENAME, emp.SAL, dept.DNAME FROM dept RIGHT JOIN emp ON emp.DEPTNO = dept.DEPTNO

查询的结果:没有的值就是null

单行函数:将每条数据进行独立的计算,然后每条数据得到一条结果;

多行函数:多条数据同时计算,最终得到一条结果数据。也成为聚集函数、分组函数,主要用于完成一些统计功能等等。

COUNT():查询表中的数据记录;

AVG():求出平均值;

SUM():求和;

MAX():求出最大值;

MIN():求出最小值。

-- 查询员工最高工资和最低工资差距

SELECT MAX(SAL) - MIN(SAL) FROM emp

把表分组,再进行 *** 作

-- 按照职位分组,求出每个职位的最高和最低工资

SELECT JOB,MAX(SAL) max, MIN(SAL) min FROM emp GROUP BY JOB ORDER BY SAL

本地时间:

SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW())

DATE_FORMAT(date, format):把日期转换为字符串。

按查询结果分类:

单行单列:只包含一个字段的查询,返回的查询结果也只包含一行数据;

多行单列:只包含了一个字段,但返回的查询结果可能多行或者零行;

多行多列:包含多个字段的返回,查询结果可能是单行或者多行,好比是一张表。

一般用于 WHERE 之后的子查询,子查询结果是一行一列记录。

使用单行记录比较运算符:=、>、>=、<、<=、<>。(单行单列才能用)

-- 查询出工资比 MARTIN 还要高的全部雇员信息

SELECT * FROM emp WHERE sal >(SELECT sal FROM emp WHERE ename = 'MARTIN')

一般也用于 WHERE 子句中,子查询结果只有一列,但是有多行。

IN:与列表中的任意一个值相等

-- 查询工资等于部门经理(职位是 MANAGER)的员工信息。

SELECT * FROM emp WHERE SAL IN (SELECT SAL FROM emp WHERE JOB = 'MANAGER')

-- 查询出每个部门的编号、名称、部门人数、平均工资 部门名称

SELECT e.DEPTNO, d.DNAME, COUNT(*), AVG(e.SAL), e.ENAME FROM emp e JOIN dept d ON e.DEPTNO = d.DEPTNO GROUP BY e.DEPTNO

其实这个和jsp没啥关系,只要你的代码没有比如爆源码或者直接上传shell这些弱智的漏洞就行了,一般的做法其实很简单,就是给mysql分配一个单独的账号,而不要使用root权限,而且只能针对目标数据库 *** 作,其他的数据库没有 *** 作权限,如果要附加上jsp的话,那么就是别让你的程序出现注入之类的漏洞,因为只要存在注入,那么至少可以肯定你的数据库会全部泄露,这样会使别人进一步入侵你甚至控制你的服务器,当然了linux和windows的服务器还是有差别的,上面给你说的只是最一般的方法


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7401281.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存