• 操作表 函数的使用


    目录

    修改表操作

    CRUD语句 

    insert语句 

    updata语句 

    ​编辑delete语句

     select语句(单表查询查询)

    sql函数使用

    统计函数

    分组统计 group by

     字符串相关函数

    数学函数

    日期函数

    加密函数

    流程控制函数

     加强查询

    分页查询

     增强group by的使用


    修改表操作

    1. -- 在员工表emp上新增一个image列 ,VARCHAR类型 要求在resume后面
    2. ALTER TABLE emp
    3. ADD (`image` VARCHAR(20)) AFTER resume
    4. -- 显示表结构
    5. DESC `emp`
    6. -- 修改job列 ,使其长度为60 不允许为空
    7. ALTER TABLE `emp`
    8. MODIFY job VARCHAR(60) NOT NULL DEFAULT ' '
    9. -- 删除 image 列
    10. ALTER TABLE `emp`
    11. DROP image
    12. -- 修改表的字符集为utf8
    13. ALTER TABLE emp CHARACTER SET utf8
    14. -- 修改表名为employee
    15. RENAME TABLE emp TO employee
    16. -- 列名name 改为user_name
    17. ALTER TABLE employee
    18. CHANGE `name` user_name VARCHAR(20) NOT NULL DEFAULT ' '

    CRUD语句 

    CREATE TABLE 表1 LIKE 表2

    把表1的结构复制给新创建的表2

    insert语句 

    使用方法

    insert into  表名(列名,列名,列名)values(数值1,数值2,数值3)

    1. INSERT INTO employee ( `id`,`user_name`,`sex`,`brithday`,`entry_date`,`job`,
    2. `salary`,`resume`)
    3. VALUES (0002,'关羽','男','2001-2-5','2005-05-05 22:40:21','分首大师',15000,'关二弟')

     细节1,如果‘123’

    加入到int类型却不会报错,因为mysql底层会产生把'xxxx'转成int类型,可以转的不报错

    updata语句 

    1. -- 将关羽的工资改为20000
    2. UPDATE employee
    3. SET salary =20000 WHERE user_name = '关羽'
    4. -- 将刘备的工资在原理基础上加5000
    5. UPDATE employee SET salary = salary+5000 WHERE user_name = '刘备'

    delete语句

    1. -- 删除张飞和赵云的信息
    2. DELETE FROM employee where user_name in ('张飞','赵云')
    3. -- 删除关羽的信息
    4. DELETE FROM employee WHERE user_name = '关羽'

     select语句(单表查询查询)

    distinct 删除重复行

    1. -- 查询所有信息
    2. SELECT * FROM employee
    3. -- 查询所有员工名字和性别
    4. SELECT user_name,sex FROM employee
    5. -- 条件查询,查询编号为3的员工的名字,性别,工资
    6. SELECT user_name,sex,salary FROM employee WHERE id = 3
    7. -- 统计stu表中每个同学的总分
    8. SELECT `name` 名字,(Chinese+Math+English) 总分 FROM stu

    1. -- 查询总分大于200且数学成绩不及格的学生名字
    2. SELECT `name` FROM stu WHERE (Chinese+Math+English)>200 AND Math<60
    3. -- 查询满足总分大于200 或 英语不及格
    4. SELECT * FROM stu WHERE (Chinese+Math+English)>200 OR English<60
    5. -- 查询名字里带红的同学
    6. SELECT * FROM stu WHERE `name` LIKE '%红%'
    7. -- 查询数学成绩在60到80的同学
    8. SELECT *FROM stu WHERE Math BETWEEN 60 and 80
    9. -- 查询所有学生,按语文成绩降序排列
    10. SELECT * FROM stu ORDER BY Chinese DESC
    11. -- 总分降序排列
    12. SELECT `name` ,(Chinese+Math+English) total FROM stu ORDER BY total DESC

    sql函数使用

    统计函数

    1. -- count()函数
    2. -- 统计一共有多少学生
    3. SELECT COUNT(*) FROM stu;
    4. -- 统计数学成绩及格的学生个数
    5. SELECT COUNT(*) FROM stu WHERE Math >=60;
    6. -- 统计总分大于250的学生个数
    7. SELECT COUNT(*) FROM stu WHERE (Chinese+Math+English)>250
    8. -- COUNT(*) 和 COUNT(列)的区别
    9. -- COUNT(*) 返回满足条件的条数 COUNT(列)满足条件的某列都多少,但是会排除null
    10. -- SUM()函数
    11. -- 统计这个班数学总成绩
    12. SELECT SUM(Math) 数学总成绩 FROM stu
    13. -- 统计这个班 三科分别的总成绩
    14. SELECT SUM(Math) 数学,SUM(English) 英语,SUM(Chinese) 语文 FROM stu
    15. -- 统计这个班三科成绩总和
    16. SELECT (SUM(Math)+SUM(English)+SUM(Chinese)) 总和 FROM stu
    17. -- AVG()函数
    18. -- 统计语文平均分
    19. SELECT AVG(Chinese) FROM stu
    20. -- 班级总分平均分
    21. SELECT AVG(Chinese+Math+English) 总分平均分 FROM stu
    22. -- 统计每个人的平均分 没用到AVG
    23. SELECT `name` , (Chinese+Math+English)/3 FROM stu
    24. -- MIN() MAX()
    25. -- 统计数学最高分
    26. SELECT MAX(Math) FROM stu
    27. -- 统计总分最低分
    28. SELECT MIN((Chinese+English+Math)) 总分 FROM stu

    分组统计 group by

    用到的数据库

    1. CREATE TABLE dept( /*部门表*/
    2. deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
    3. dname VARCHAR(20) NOT NULL DEFAULT "",
    4. loc VARCHAR(13) NOT NULL DEFAULT ""
    5. );
    6. INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK'), (20, 'RESEARCH', 'DALLAS'), (30, 'SALES', 'CHICAGO'), (40, 'OPERATIONS', 'BOSTON');
    7. #创建表EMP雇员
    8. CREATE TABLE emp
    9. (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/
    10. ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
    11. job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
    12. mgr MEDIUMINT UNSIGNED ,/*上级编号*/
    13. hiredate DATE NOT NULL,/*入职时间*/
    14. sal DECIMAL(7,2) NOT NULL,/*薪水*/
    15. comm DECIMAL(7,2) ,/*红利*/
    16. deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
    17. );
    18. INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00,NULL , 20),
    19. (7499, 'ALLEN', 'SALESMAN', 7698, '1991-2-20', 1600.00, 300.00, 30),
    20. (7521, 'WARD', 'SALESMAN', 7698, '1991-2-22', 1250.00, 500.00, 30),
    21. (7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20),
    22. (7654, 'MARTIN', 'SALESMAN', 7698, '1991-9-28',1250.00,1400.00,30),
    23. (7698, 'BLAKE','MANAGER', 7839,'1991-5-1', 2850.00,NULL,30),
    24. (7782, 'CLARK','MANAGER', 7839, '1991-6-9',2450.00,NULL,10),
    25. (7788, 'SCOTT','ANALYST',7566, '1997-4-19',3000.00,NULL,20),
    26. (7839, 'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),
    27. (7844, 'TURNER', 'SALESMAN',7698, '1991-9-8', 1500.00, NULL,30),
    28. (7900, 'JAMES','CLERK',7698, '1991-12-3',950.00,NULL,30),
    29. (7902, 'FORD', 'ANALYST',7566,'1991-12-3',3000.00, NULL,20),
    30. (7934,'MILLER','CLERK',7782,'1992-1-23', 1300.00, NULL,10);
    31. #工资级别表
    32. CREATE TABLE salgrade
    33. (
    34. grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
    35. losal DECIMAL(17,2) NOT NULL,
    36. hisal DECIMAL(17,2) NOT NULL
    37. );
    38. INSERT INTO salgrade VALUES (1,700,1200);
    39. INSERT INTO salgrade VALUES (2,1201,1400);
    40. INSERT INTO salgrade VALUES (3,1401,2000);
    41. INSERT INTO salgrade VALUES (4,2001,3000);
    42. INSERT INTO salgrade VALUES (5,3001,9999);
    1. -- 查询每个部门的最高工资 和平均工资
    2. SELECT MAX(sal) 最高工资, AVG(sal) 平均工资 FROM emp GROUP BY deptno
    3. -- 查询每个部门的,每个岗位的平均工资和最低工资
    4. SELECT AVG(sal) 平均工资,MIN(sal) 最低工资 , deptno 部门, job 岗位 FROM emp GROUP BY deptno,job
    5. -- 显示平均工资低于2000的部门号和他的平均工资
    6. SELECT deptno 部门号 , AVG(sal) 平均工资 FROM emp GROUP BY deptno HAVING AVG(sal)<2000

     字符串相关函数

    1. -- CHARSET(STR) 返回字符串字符集
    2. SELECT CHARSET(ename) FROM emp;
    3. -- CONCAT(str1,str2,...) 连接字符串
    4. SELECT CONCAT(ename,'工作是',job) FROM emp
    5. -- INSTR(str,substr) 返回substr在string中出现的位置,没有返回0
    6. -- UCASE(str) 转成大写 LCASE(str)小写
    7. SELECT UCASE(`ename`) FROM emp
    8. SELECT LCASE(`ename`) FROM emp
    9. -- LEFT(str,length)从str中的左边取length个字符
    10. SELECT LEFT(ename,3) FROM emp
    11. -- RIGHT(str,length)从str中的左边取length个字符
    12. SELECT RIGHT(ename,3) FROM emp
    13. -- LENGTH(str) str 的长度
    14. SELECT LENGTH(ename) from emp
    15. -- REPLACE 替换
    16. SELECT REPLACE(ename,'SMITH','史密斯')FROM emp
    17. -- STRCMP(expr1,expr2)逐字符比较两字符串大小
    18. -- SUBSTRING(列名,开始位置,结束位置)从列名,开始位置取字符到结束位置
    19. SELECT SUBSTRING(ename,1,2) FROM emp
    20. -- LTRIM(str)去除前端空格 RTRIM(str)去除后端空格 TRIM(str)去除两段空格
    21. SELECT LTRIM(' 指的是大') FROM DUAL
    22. SELECT RTRIM('dasdsad ') FROM DUAL
    23. SELECT TRIM(' sdda ') FROM DUAL

    数学函数

    1. -- ABS(X)绝对值
    2. SELECT ABS(-10) FROM DUAL;
    3. -- BIN(N)十进制转二进制
    4. SELECT BIN(30) FROM DUAL;
    5. -- CEILING(X)向上取整,得到比x大的最小整数
    6. SELECT CEILING(30.41) FROM DUAL;
    7. -- FLOOR(X)向下
    8. SELECT FLOOR(-11.6) FROM DUAL;
    9. -- CONV(N,from_base,to_base) 进制转换
    10. SELECT CONV(98,10,16) FROM DUAL
    11. -- FORMAT(X,D)保留D位小数位数 四舍五入
    12. SELECT FORMAT(11.146344,2) FROM DUAL
    13. -- HEX(N_or_S)转成16进制
    14. -- LEAST(value1,value2,...)求最小值
    15. SELECT LEAST( 1,2,4) FROM DUAL
    16. -- MOD(N,M) 求N/M余数
    17. SELECT MOD(6,4) FROM DUAL
    18. -- RAND() 返回随机数 范围为0到1 内部加数字生成的随机数就不变了
    19. SELECT RAND() FROM DUAL
    20. SELECT RAND(1) FROM DUAL

    日期函数

    1. -- 创建测试表
    2. CREATE TABLE mes(
    3. id INT,
    4. content VARCHAR(30),
    5. send_time DATETIME)
    6. INSERT INTO mes VALUES(1,'北京新闻',CURRENT_TIMESTAMP())
    7. INSERT INTO mes VALUES(1,'上海新闻',NOW())
    8. -- CURRENT_DATE()当前日期
    9. SELECT CURRENT_DATE() FROM DUAL
    10. -- CURRENT_TIME()当前时间
    11. SELECT CURRENT_TIME() FROM DUAL
    12. -- CURRENT_TIMESTAMP 当前时间戳
    13. SELECT CURRENT_TIMESTAMP() FROM DUAL
    14. -- 显示所有新闻信息,只显示日期不显示时间
    15. SELECT id,content,DATE(send_time) FROM mes
    16. -- 查询10分钟内的新闻
    17. SELECT*FROM mes WHERE DATE_ADD(send_time,INTERVAL 10 MINUTE) > NOW()
    18. -- 求出2011-11-11和1990—1-1相差多少天
    19. SELECT DATEDIFF('2001-11-11','1990-1-1') FROM DUAL
    20. -- 求出2001-1-1日到现在过来多少天
    21. SELECT DATEDIFF(NOW(),'2001-1-1') FROM DUAL
    22. -- 如果你能活到80岁你还能活几天,假如你2001-1-1日出生
    23. -- 1.先求出80岁时是什么时候
    24. SELECT DATEDIFF(DATE_ADD('2001-1-1',INTERVAL 80 YEAR),NOW())
    25. -- 求时间间隔
    26. SELECT TIMEDIFF('2001-1-2 10:21:21','2001-1-1 10:21:21') FROM DUAL
    27. -- 显示日期的年或月或日
    28. SELECT YEAR('2001-4-5')FROM DUAL
    29. SELECT month('2001-4-5')FROM DUAL
    30. SELECT DAY('2001-4-5')FROM DUAL
    31. -- UNIX_TIMESTAMP():返回1970年到现在的毫秒数
    32. SELECT UNIX_TIMESTAMP() FROM DUAL

    加密函数

    1. -- USER() 查询当前用户 可以查看登录到mysql有那些用户,以及登录的ip
    2. -- DATABASE()数据库名称
    3. -- PASSWORD() 加密函数 数据库的密码就是这样加密的
    4. SELECT PASSWORD('qwer') FROM DUAL
    5. -- MD5(str) 为字符串生成一个md5的字符串 32位,常用于为密码加密
    6. SELECT MD5('123123') FROM DUAL
    7. -- 例子
    8. CREATE TABLE `user`(
    9. `id` int,
    10. `name` VARCHAR(10),
    11. `pwd` char(32))
    12. INSERT INTO `user`
    13. VALUES(1,'zhang',MD5(1234556))
    14. -- 查询这个用户
    15. SELECT * FROM `user` WHERE `name`='zhang'AND `pwd`= MD5(1234556)
    16. -- 数据库的用户信息
    17. SELECT * FROM mysql.user

     

    流程控制函数

     

     

    1. -- 查询emp表,如果comm为null,则显示0.0
    2. SELECT ename,IF(comm IS NULL,0.0,comm) FROM emp
    3. SELECT ename ,IFNULL(comm,0.0) FROM emp
    4. -- 如果 emp表的job是CLERK 则显示职员 如果是MANAGER则显示经理如果是SALESMAN 则显示
    5. -- 销售 如果是其他正常显示
    6. SELECT ename ,(SELECT CASE
    7. WHEN job = 'CLERK' THEN '职员'
    8. WHEN job = 'MANAGER' THEN '经理'
    9. WHEN job = 'SALESMAN' THEN '销售'
    10. ELSE job END) AS job FROM emp

     加强查询

    分页查询

    1. -- 分页查询, 查询3条数据显示在第一页
    2. SELECT * FROM emp ORDER BY empno LIMIT 0,3
    3. -- 按雇员的id号降序取出,每页显示2条记录,分别显示第三页和第五页的数据
    4. SELECT * FROM emp ORDER BY empno LIMIT 4,2;
    5. SELECT * FROM emp ORDER BY empno LIMIT 8,2

     增强group by的使用

    1. -- 使用分组函数和分组子句group by
    2. -- (1)显示每种岗位的雇员总数、平均工资。
    3. SELECT COUNT(*) 雇员总数,AVG(sal) FROM emp
    4. GROUP BY job
    5. -- (2)显示雇员总数,以及获得补助的雇员数(comm 非空)。
    6. SELECT COUNT(*) 雇员总数 ,COUNT(comm) 获得补助 FROM emp
    7. -- 统计没有获得补助的雇员数
    8. SELECT COUNT(*) , COUNT(IF(comm is NULL,1,null)) FROM emp
    9. -- (3)显示管理者的总人数。DISTINCT 去除重复
    10. SELECT COUNT(DISTINCT mgr) FROM emp
    11. -- (4)显示雇员工资的最大差额。
    12. SELECT MAX(sal) - MIN(sal) 最大差额 FROM emp
    13. -- 统计每个部门的平均工资,并且是大于1000的,
    14. -- 按照平均工资从高到低排序,取出前两行记录
    15. SELECT AVG(sal) FROM emp
    16. GROUP BY deptno HAVING AVG(sal)>1000
    17. ORDER BY AVG(sal) DESC
    18. LIMIT 0,2

  • 相关阅读:
    tomcat的介绍与优化
    在Microsoft Exchange Server 2007中安装SSL证书的教程
    linux网络编程中的errno处理
    python字符串应用
    Coinbase: AI+区块链的投资与创业机会
    EasyOCR 识别模型训练
    vue3 自定义loading
    【Spring 源码】Spring MVC 的加载原理(一)
    搭建开发环境vue3.2+vite3
    Reat 中的 useTransition 钩子函数
  • 原文地址:https://blog.csdn.net/hagong9/article/details/126150331