http://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202005%2F08%2F20200508102713_L8aCB.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1649077062&t=40b7b14053ef546a57de4934b9442cbe",

MySQL常用管理命令、常用函数小计

1、Windows系统是MySQL服务器的关闭、重启 ( mysql为服务名 )

  关闭服务:net stop mysql

  启动服务:net start mysql 

2、连接mysql服务器

  在cmd窗口执行命令:mysql -h 127.0.0.1 -P 3306 -u root -p 

  -h 127.0.0.1 :指定主机IP 

   -P 3306:执行mysql服务端口

  -u root:指定需要连接的用户

  -p:指定登录密码(假设为root),可直接无空格方式写在-p命令后(-proot),也可回车后,根据系统提示,密文输入

3、常用管理维护命令

  mysql命令行方式查看当前数据库版本:select version();

  查看当前所在的数据库:select database();

  查看当前数据库用户:select user();

  cmd方式查看当前数据库版本:mysql --version  或者  mysql -V

  显示所有数据库:show databases;

  进入test库:use test;

  显示当前库表:show tables;

  显示指定数据库mysql内的表:show tables from mysql;

  显示info表的结构:desc info;

4、MySQL语法规范

  (1)不区分大小写,建议关键字大写,表名、列名小写

  (2)每条命令建议分号结尾

  (3)命令根据需要缩进、换行

  (4)单行注释:#注释文字

      单行注释:--注释文字

      多行注释:/* 数值文字 */

5、DQL语句

 ##查询员工表中的name字段(因为name也是mysql的关键字,为表述清晰,可在字段上加着重符 ` ,不是单引号,是TAB键上边的按键。)

  SELECT `name` FROM employees;

 ##MySQL中的+号只有运算符的功能,不能做连接符

  SELECT 1+1  ##正常加法,输出2

  SELECT ‘1’+1  ##尝试将字符1转换为数值型成功,执行加法,输出2

  SELECT ‘mysql’+1   ##尝试将字符mysql转换为数值型失败,将其转为0,执行加法,输出1

  SELECT null+1  ##只要一方为null,结果为null

 ##在mysql中使用 CONCAT() 函数进行字段结果的连接

  SELECT CONCAT(lastname,firstname) as name FROM employees;

  SELECT CONCAT(lastname,‘+’,firstname) as name FROM employees;  #字段间使用+号拼接

  注意:字段中存在null值时,拼接结果将为null,可使用 IFNULL(lastname,"") 函数将null转换为空字符串。

     另有isNull()函数,判断字段是否为null,为null返回1,不为null,返回0。

 ##通配符转义

  SELECT last_name FROM employees WHERE last_name LIKE '_\_yhon';  #使用默认转义字符 \ 转义通配符 _

  SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';  #指定转义字符 $ 转义通配符 _

5、MySQL函数

5.1、单行函数

5.1.1、字符函数

  LENGTH(string) :获取字符串string的字节

  CONCAT(str1,str2) :拼接字符串

  UPPER(string) :变大写

  LOWER(string):变小写

  DUBSTR(string,n):截取string字符串从指定索引n处到后面的所有字符,默认下边从1开始,包含起始位置字符

  DUBSTR(string,n,m):截取string字符串中从指定索引n处到开始到后面共m位字符

  INSTR(string1,string2):返回string2在string1中第一次出现的索引,无则返回0

  TRIM(string) :去掉string字符串两端的空格

  TRIM('m' FROM string):去掉字符串两端的指定m字符串

  LPAD(string,n,m):用指定字符m实现对string字符串左填充到指定长度n (string长度超过n)将会被从后面截取

  RPAD(string,n,m):用指定字符m实现对string字符串左填充到指定长度

  REPLACE(string,str1,str2):用子串str2去替换string中所有的str1子串

5.1.2、数学函数

  ROUND(num):对num进行四舍五入

  ROUND(num,n):对num小数点后保留n位四舍五入

  CELL(num):向上取整,返回大于等于该参数的最小整数

  FLOOR(num):向下取整,返回小于等于该参数的最大整数

  TRUNCATE(num,n):截取函数,对于num小数点后保留n位

  MOD(a,b):取余函数,结果正负取决于被除数的正负,运算原理:a % b == a - a / b * b

5.1.3、日期时间

  NOW() :返回系统当前日期+时间,格式:YYYY-MM-DD HH:mm:ss

  CURDATE():返回当前系统日期,格式:YYYY-MM-DD

  CURTIME():返回当前系统时间,格式:HH:mm:ss

  MONTH(NOW()):返回当前月

  MONTHNAME(NOW()):返回当前月的英文  ##年、日、小时、分钟、秒等类似

  DATADIFF(time1,time2) :返回time1和time2相差的天数

  STR_TO_DATE('9-13-1999','%m-%d-%Y'):将日期格式的字符串转换成指定格式的日期,输出 1999-09-13

  DATE_FORMATE('2018/6/6','%Y年%m月%d日'):将日期字符串转换成字符,输出 2018年06月06日

  ##常用格式符说明

  %Y:四位的年份  %y:两位的年份 

  %c:固定两位的月份(01,02...11,12)  %m:非固定格式的月份(1,2,3...11,12)

  %d:日(01,02,03...)

  %H:小时(24小时制)  %h:小时(12小时制)

  %i:分钟(00,01,02...59)

  %s:秒(00,01,02...59)

5.1.4、流程控制函数

  ## IF函数:IF(expr1,expr2,expr3)

  SELECT name,commission_pct,IF(commission_pct IS NULL,'没奖金','有奖金');

  ## CASE函数(1、单数值匹配) :CASE expr1 WHEN c1 THEN expr2;WHEN c2 THEN expr3;......ELSE expr4;

  SELECT name,salary,department_id,

  CASE department_id

  WHEN 10 THEN salary*1.1

  WHEN 20 THEN salary*1.2

  WHEN 30 THEN salary*1.3

  ELSE salary

  END AS new_salary

  FROM employees;

  ## CASE函数(2、区间值匹配) :CASE  WHEN expr1 THEN res1 ;WHEN expr2 THEN res2;......ELSE expr3 END;

  SELECT salary,

  CASE 

  WHEN salary>2000 THEN 'A'

  WHEN salary>1500 THEN 'B'

  WHEN salary>1000 THEN 'C'

  ELSE 'D'

  END AS salary_class

  FROM employees;

5.2、分组函数(聚合函数、统计函数、组函数)

5.2.1、简单分组函数

  ## 求和函数 SUM(c1),求平均 AVG(c1),求最大 MAX(c1),求最小 MIN(c1),求个数 COUNT(c1)

  SELECT SUM(salary), AVG(salary), MAX(salary), MIN(salary), COUNT(salary) FROM employees;

   说明:SUM/AVG一般计算数值型数据;MAX/MIN/COUNT可用于任何字段;

  SUM/AVG/MAX/MIN/COUNT均会忽略NULL值;

  以上分组函数可以和DISTINCT()函数配合使用,达到去重的效果:

  SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;

  和分组函数一同查询的字段要求是group by后的字段。

  ##COUNT(*) 和 COUNT(1)

  都是用来统计数据表的总记录数,COUNT(1)相当于对表扩展了一列(1),去统计该列的行数;

  MYISAM引擎下,COUNT(*) 效率高;INNODB引擎下,两者差不多。

5.2.2、分组查询

  ## GROUP BY 语句,查询的列表要求是分组函数和GROUP BY后出现的字段,同时MySQL的GROUP BY 和HAVING语句后支持别名,Oracle不支持。

  ## 简单 GROUP BY语句

  SELECT MAX(salary),job_id FROM employees GROUP BY job_id;

  ## 添加分组前筛选条件的 GROUP BY 语句(针对原始表的数据源,在GROUP BY 前,使用WHERE)

  SELECT MAX(salary),job_id FROM employees WHERE email LIKE '%a%' GROUP BY job_id;

  ##添加分组后筛选条件的 GROUP BY 语句(针对分组后的结果集,在GROUP BY 后,使用HAVING)

  SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)>2;

  ##分组前、后均有筛选条件的 GROUP BY 语句

  SELECT COUNT(*),department_id FROM employees WHERE  email LIKE '%a%'  GROUP BY department_id HAVING COUNT(*)>2;

  ##按多个字段进行 GROUP BY分组

  SELECT AVG(salary),department_id,job_id FROM employees GROUP BY job_id,department_id;

  ##带有排序的 GROUP BY 语句

  SELECT AVG(salary),department_id,job_id FROM employees GROUP BY job_id,department_id ORDER BY AVG(salary) DESC;

  ##使用表达式或者函数分组(GROPU / HAVING 后支持别名,oracle不支持)

  SELECT COUNT(*) FROM employee GROUP BY LENGTH(last_name);

posted @ 2024-04-18 20:14  DeepInThought  阅读(27)  评论(0编辑  收藏  举报