mysql正删改查返回值_MySQL_增删改查

DQL 查询

select 查询列表 from 表明;

特点:查询列表可以是:表中的字段、常量、表达式、函数

查询的结果是一个虚拟的表格 也就是临时性的。

1.如何查询表中的单个字段

SELECT last_name FROM employees;

2.查询表中的多个字段

SELECT last_name,salary,email FROM employees;

3.查询表中的所有字段

SELECT 也可以直接双击 把所有的都点进去 F12可以格式化代码

也可以SELECT * FROM employees;也是查询所有的字段 但是表中的顺序都不会变了

USE +库名;

4.查询常量值

SELECT 100;

SELECT ‘john’;

5.查询表达式

SELECT 100*98;他会直接算出结果来

6.查询函数

SELECT VERSION();查询数据库版本的函数

7.起别名

便于理解

如果要查询的字段有重名的情况可以区分开来

方式一 使用AS

SELECT 100*98 AS 结果;

SELECT last_name AS 姓,first_name AS 名 FROM employees;

方式二 使用空格

SELECT last_name 姓,first_name 名 FROM employees;

案例:查询salary 显示结果为 out put

但是out是字段 为了避免重复可以用双引号将out引起来

8.去重

案例:查询员工表中设计到的所有的部门标号

SELECT department_ id FROM employees;

这样的话就可以在SELECT后面加上DISTINCT

SELECT DISTINCT department_ id FROM employees;

9.+号的作用

Java中+可以用来做运算 第二还可以作为连接符 只要有一个为字符串 他就可以作为链接符但是在这里他只有一个作用就是运算符

两个都是数值型就会做加法运算

如果有其中一方为字符型 他会试图将字符型转换为数值型 然后继续做加法运算 SELECT ‘123’ + 45; 结果是168

如果转换失败 则将字符型数值转换为0SELECT ‘join’ +34; 结果是0 + 34 = 34 因为join没有转换成功

如果其中一方为null 则结果肯定为null

连接字段

SELECT last_name + first_name AS 姓名 FROM employees;//这个是错误的

有专门作为链接字符的关键字 CONCAT

SELECT CONCAT(‘a’ ,'b','c') AS 结果;

输出为abc

10.ifnull

IFNULL(a,0) 如果a为null 那么给a赋值为0

SELECT

IFNULL(commission_pct,0) AS `奖金`,

commission_pct

FROM

employees

如果奖金为null的话给他赋值为0

ifnull主要是用在select字段数据里,相当于代码里的一个二元函数,即看字段是否为空,不为空则返回该字段,为空则返回函数里的第二个参数的值。

进阶2:条件查询

SELECT 查询列表 FROM 表名 WHERE 筛选条件

分类:

一、按条件表达式筛选

条件运算符 > < = != <>(不等于) >= <=

案例1: 查询工资>12000的员工信息

SELECT * FROM employees WHERE salary>120000;

二、按逻辑表达式筛选

逻辑运算符 : && || ! (and or not )

案例:查询工资在10000-20000之间的员工名 工资和奖金

SELECT last_name,salary,commission_pct FROM employees WHERE salary >=10000 AND salary<=20000;

三、模糊查询

like

between and

in

is null

like

是像什么样子的意思

案例1:查询员工命中包含字符a 的员工信息

SELECT * FROM employees WHERE last_name LIKE ‘%a%'; %代表通配符 代表任意多个字符,也包括0个字符 _ 表示任意单个字符

案例2:查询第三个字符为e 第五个字符为a的员工名和工资

SELECT * FROM employees WHERE last_name LIKE ‘__e_a%';

案例3:查询员工名中第二个字符为_的员工名

SELECT * FROM employees WHERE last_name LIKE ‘_\_%';\是转义字符.

查询员工编号在100到120之间的员工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

between and

注意:使用between and 能增强可读性

包含临界值: 即100 和120是包括在内的

他完全等价于. employee_id >=100 And employee_id <= 120; 所以 在between and里的 120 和100是不可以随意调换位置的

in

in 案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES是其中一个员工名和工种编号

SELECT last_name,job_id FROM employees WHERE job_id = 'IT_PROG' OR job_id = ' AD_VP' OR job_id = 'AD_PRES'; 但是这样写很麻烦所以有了一种新的 写法

SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG','AD_VP','AD_PRES') ;in 列表的值类型必须统一 或者兼容

is null

查询没有奖金的员工名和奖金率

SELECT last_name,job_id FROM employees WHERE commission_pct = NULL; 但是这个出不来结果 因为= 号不能用来判断null值

SELECT last_name,job_id FROM employees WHERE commission_pct IS NOT NULL;

如果是查询没有奖金的话就用:

SELECT last_name,job_id FROM employees WHERE commission_pct IS NULL;

安全等于<=>

查询没有奖金的员工名和奖金率

SELECT last_name,job_id FROM employees WHERE commission_pct <=> NULL;

查询工资=12000的员工信息

SELECT * FROM employees WHERE salary <=> 120000;

IS NULL 仅仅可以判断null值 可读性高 建议使用

<=> 既可以判断null值还可以 判断普通的数值 可读性较低

进阶3: 排序查询

SELECT 查询列表 FROM 表 WHERE 筛选条件 ORDER BY 排序列表 【 asc|desc】升序 | 降序

SELECT * FROM employees ORDER BY salary desc;

进阶4:常见函数

将一组逻辑语句封装在方法体重,对外暴露方法名

好处:1、隐藏了实现细节 2、提高代码的重用性

分类:单行函数 CONCAT length ifnull等

有:

字符函数

length :

select length(’哈哈哈‘);

一个汉字三个字节 一个字母一个字节 获取参数值的字节数

CONCAT

拼接字符: select CONCAT(’last_name‘,’_‘) 姓名 FROM employees;

upper

改成大写 : upper(’hhh‘);

lower

改成小写 : lower('KKK');

substr、substring

(他俩是一样的) :截取字符

select substr(‘李莫愁爱上了陆展元’,7) out_put ; 截出陆展元 6是索引 且所有的索引都是从1开始的 截取指定索引处后面所有字符

select substr(‘李莫愁爱上了陆展元’,1,3) out_put ; 从指定索引处截取指定长度的字符长度

instr:

返回子串在大的字符串里第一次出现的索引,如果找不到返回0

trim:

去掉某个字符前后的空格

lpad:

用指定字符实现左填充指定长度

rpad

是右填充

replace

替换

如果有多个周芷若 他会全部都换成赵敏

数学函数

round

四舍五入

他还有个重载

ceil

向上取整,返回大于等于该参数的最小整数

floor

向下取整 返回小于等于该参数的最大整数

truncate:

截断

mod

取余

mod (a,b):a-a/b*b

rand

返回(0-1)之间的小数 取不到1

rand有两种形式:

1、rand(),即无参数的,此时产生的随机数是随机的,不可重复的;

2、rand(n),即有参数数,如rand(2),相当于指定随机数生产的种子,那么这种情况产生的随机数是可重复的。

日期函数

now()

curdate()

curtime()

year 返回年

month 返回月

day 返回日

hour 返回小时

second 返回秒

minute返回分钟

monthname 以英文形式返回月

其他函数

password

流程控制函数

if函数

case

这个是等值判断

这个区间判断

分组函数

功能 做统计使用 又称为统计函数 或者聚合函数 或者组函数

sum 求和

sum();要求放一个参数 即你想要的统计的参数

avg 平均值

max 最大值

min 最小值

count 计算个数,只计算不为null的值

2.参数支持哪些类型:

sum avg 都用于数值型

日期、字符型支持MAX 和 MIN

3.忽略null

sum计算时不会计算null值 因为null加上什么都是null

以上分组函数都忽略null值

4.可以和distinct搭配实现去重的运算

5、count函数的详细介绍

count(*)&count(1)&count(列名)执行效率比较:

如果列为主键,count(列名)效率优于count(1)

如果列不为主键,count(1)效率优于count(列名)

如果表中存在主键,count(主键列名)效率最优

如果表中只有一列,则count(*)效率最优

如果表有多列,且不存在主键,则count(1)效率优于count(*)

6.和分组函数一同查询的字段有限制 要求是group by 后的字段

因为我们要让表格完成呈现

进阶5:分组查询

案例1:查询每个部门的平均工资

group by 后面的job_id 就是相当于 把相同的job_id分为一类 计算 每类工种的最大工资

分组前的筛选用where 分组后的筛选用having

查询的时候 where对应的是数据库的表 having对应的是查询的虚拟表

group by 子句多个字段用逗号隔开

进阶6:连接查询 多表链接

当查询的字段设计多个表时

我们通常多表查询时会多次用到表名

而我们平时起的表名都是特别长的

所以我们这时就会给起别名

提高语句的简洁度

区分多个重名的字段

注意:如果为表起了别名 那么之后的字段就不能用表名来限定 只能用别名来限定了

5.可以加分组吗?

6.可不可以加排序?

7.可以实现三表连接吗

8.非等值链接

3.自连接

就是将自己的表看成是两张表

二、sql99语法

连接类型有:

(一)内连接

语法:

1、等值连接

案例1:查询员工名、部门名

inner 可以省略

(二)非等值连接

(三)自连接

二、外连接

查询一个表中有一个表中没有的记录

全外连接:

MySQL不支持.

三、交叉连接

笛卡尔乘积

交叉连接他会把每种情况都匹配出来

进阶7:子查询

出现在其他语句中的select语句,成为子查询或内查询

外部查询语句,成为主查询或者外查询

一、where或having后面

1、标量子查询

2、列子查询

not in 是指不等于括号里的任意一个

3、行子查询

1、子查询放在小括号内

2、子查询一般放在条件的右侧

> < >= <= = <>

4、列子查询 一般搭配多行操作符使用

in、any/some、all

二、放select后面

三、from后面

四、exists 后面(相关子查询)

因为有的部门可能没有员工

第二种方法

案例2:

进阶8:分页查询

应用场景:当要显示的数据一页显示不全,需要分页提交sql请求

语法:

limit一定放在最后

进阶9:联合

合并:将多条查询语句的结果合并成一个结果

只能查有相同数量字段的两个结果

使用union链接 会自动去重 如果不想去重的话 可以使用union all 他会包含重复项

你可能感兴趣的:(mysql正删改查返回值)