Day2 MySql函数以及单表查询

SQL中的运算符

算术运算符

--算术运算符(子句)
select 1+1;
select 2-1;
select 2*2;
select 3/4;   --0.75
select 3/0;   --NULL
select 3 div 4; --0

比较运算符> < >= <= != =

--0表示false,1表示true
select 1=1; --1
select 1!=1; --0

逻辑运算符  and or !

select 1=1 and 1!=1;

位运算符 | ^ &

select 2|3;  --3
select 2&3;  --2
select 2^3;  --1

DML(insert、update、delete)

insert(插入)

语法

insert into tname[(字段…)] values(值…)

例如

--插入数据
insert into student values(1,‘zs‘,18);
--只给部分字段添加值
insert into student(sname,age) values(‘ls‘,19);
--批量插入多条记录
insert into student(sname,age) values(‘ww‘,19),(‘zs‘,18),(‘tq‘,20);
--student表有数据,stu表复制student表数据
--复制表结构
create table stu select * from student where 1 = 0;
--复制表数据
insert into stu select * from student;

update(修改)

语法

update tname set 字段=新值 [where 条件]

例如

--ww的年龄+1
update student set age=age+1 where sname=‘ww‘;

delete(删除)

语法

delete from tname [where 条件]

例如

delete from student where sid =5;

delete和truncate的区别

  1. delete不会重置自增,truncate会重置

    2.delete删除是行级删除,一行一行删除,效率低;truncate效率高。

DQL

emp(员工)表

dept(部门)表

例如

--查询所有数据(结果集)
select * from emp;
--查询部分字段  名称和工资
select ename,sal from emp;
--查询工资>2000的员工信息(单一条件查询)
select * from emp where sal > 2000;
--查询在20号部门且工资大于2000的员工信息(多个条件)
select * from emp where deptno = 20 and sal > 2000
--查询在20号部门或者工资大于2000的员工信息
select * from emp where deptno = 20 or sal > 2000;
--查询工资大于等于1000小于等于3000的员工信息(范围查询)
select * from emp where sal >= 1000 and sal <= 3000;
select * from emp where sal between 1000 and 3000;
--查询员工编号为7788,7369,7521的员工信息(集合查询)
select * from emp where empno = 7788 or empno = 7369 or empno=7521
select * from emp where empno in (7788,7369,7521);
--查询所有的职位信息(去重)
select DISTINCT job from emp;
--别名(字段,表)   [as] 别名
select empno 员工编号,ename 员工姓名 from emp;
select ename,sal*1.05 as sal from emp;
select * from emp e;
--查询所有没有奖金comm为null的员工信息(null的判断)
select * from emp where comm is not null;
--查询所有S打头的员工信息(模糊查询)  % 代表0到多个字符 _代表占一个字符
select * from emp where ename like ‘S%‘;
--查询所有N结尾的员工信息(模糊查询)
select * from emp where ename like ‘%N‘;
--查询所有包含S的员工信息(模糊查询)
select * from emp where ename like ‘%A%‘;
--查询所有第二个字符为L的员工信息
select * from emp where ename like ‘__L%‘;
--排序(order by 字段 [asc] | desc)
--升序排序
select * from emp order by sal desc;
--按照工资的降序排序,工资一样的按照empno的升序排序
select * from emp order by sal desc,empno ASC
--限制结果查询(limit m,n)  分页查询    m代表起始索引,n代表记录的数目
--仅适用于mysql
select * from emp limit 5,5;

函数

1.单行函数

a)数学函数

--数学函数
select ABS(10);    --绝对值
select CEIL(-12.3);  --向上取整
select FLOOR(12.5);  --向下取整
select ROUND(12.5);  --四舍五入
select ROUND(12.49,-1);
select POW(3,3);     --幂运算
select RAND();     --随机数[0,1)

b)字符函数

--字符串函数
select LENGTH(ename) from emp;  --获取字符串长度
select length(‘this is an apple‘);
select LOWER(ename) from emp;   --转换为小写
select UPPER(‘this is an apple‘); --转换大小写
select SUBSTR(‘aabbcc‘,1,2);  --从1开始
select LPAD(‘smith‘,10,‘*‘);  --左填充 开始字符串   总长度   padstr填充的字符
select RPAD(‘smith‘,10,‘*‘);  --右填充
select TRIM(‘      smi th‘);   --去空格

c)日期函数

--日期
select NOW();
select SYSDATE();
select CURRENT_DATE();  --当前日期
select CURRENT_TIME();  --当前时间
select YEAR(‘1998-09-09‘);
select MONTH(‘1998-09-09‘);
select DAY(‘1998-09-08‘);
select DATE_ADD(‘1998-09-08‘,INTERVAL 2 YEAR);

2.聚合函数

count、sum、avg、max、min

--员工数(统计记录数)
select * from emp;
select count(*) from emp;
select count(1) from emp;
--统计非空字段数目
select count(comm) from emp;
--SUM
select sum(sal) from emp;
--AVG
select avg(sal) from emp;
--MAX
select max(sal) from emp;
--MIN
select min(sal) from emp;

3.分组函数

group by 分组字段

--分组函数  GROUP BY  deptno
--每个部门的平均工资
--group by根据条件字段的值返回相应的记录数;但是在select子句中,只能出现聚合函数或者分组的条件字段。
select deptno,avg(sal) from emp group by deptno;
--各个职位员工数? job
select job,count(*) from emp group by job;

having 将分组之后的结果集再次进行检索

--平均工资大于2000的部门的部门编号和平均工资?
  --1.求出每个部门的平均工资
  --2.平均工资>2000
  select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

where和having的区别

--查询工资大于1500的每个部门的部门编号和平均工资(先过滤再分组)
select deptno,avg(sal) from emp where sal > 1500 group by deptno;
--查询平均工资大于1500的部门编号和平均工资
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

4.加密函数

MD5、SHA、PASSWORD

--加密函数
select MD5(‘root‘);
select SHA(‘root‘);
select PASSWORD(‘root‘);

外键约束

--添加外键约束
alter table student add CONSTRAINT FK_CID FOREIGN KEY(cid) REFERENCES classroom(cid)

原文地址:https://www.cnblogs.com/qingyunzong/p/8277607.html

时间: 2024-10-04 17:21:55

Day2 MySql函数以及单表查询的相关文章

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

mysql四-1:单表查询

阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询 一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 f

Mysql(四)-1:单表查询

一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group

MySQL学习9 - 单表查询

一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit 限制查询的记录数 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where

MySQL 数据库之单表查询

一.查询语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键字执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4

mysql 数据操作 单表查询 通过四则运算查询

#通过四则运算查询 SELECT name, salary*12 FROM employee; SELECT name, salary*12 AS Annual_salary FROM employee; SELECT name, salary*12 Annual_salary FROM employee; 查看年薪salary*12 mysql> select name,salary*12 from employee; +------------+-------------+ | name |

mysql 数据操作 单表查询 简单查询 避免重复DISTINCT

创建数据库company create database company charset=utf8; use company; company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment varchar 薪水 salary double 办公室 office int 部门编号 depart_id int #

mysql 数据操作 单表查询 group by 练习

1. 查询岗位名以及岗位包含的所有员工名字 mysql> select post,group_concat(name) from employee group by post; +-----------+-------------------------------------------------+ | post | group_concat(name) | +-----------+-------------------------------------------------+ | o

mysql 数据操作 单表查询 having 过滤 练习

1. 查询各岗位内包含的员工个数小于2的岗位名.岗位内包含员工名字.个数 mysql> select post,group_concat(name),count(id) from employee group by post; +-----------+-------------------------------------------------+-----------+ | post | group_concat(name) | count(id) | +-----------+-----