[MySQL]2.基本语句

1. 导入示例数据库

教程 https://www.yiibai.com/mysql/how-to-load-sample-database-into-mysql-database-server.html

2. SQL是什么?MySQL是什么?

2.1 SQL

SQL(/ˈsiːkwəl/,Structured Query Language,结构化查询语言),用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
SQL在1986年成为美国国家标准学会(ANSI)的一项标准,在1987年成为国际标准化组织(ISO)标准。虽然有这一标准的存在,但大部分的SQL代码在不同的数据库系统中并不具有完全的跨平台性。

2.2 MySQL

MySQL原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun Microsystems收购。2009年,Oracle收购Sun Microsystems。

特点:

  • 开源
  • 关系型
  • 规模小、功能有限

3. 查询语句 SELECT FROM

3.1 语句解释

从表中选择数据

SELECT
  	attribute_name, ...
FROM
  	table_name

3.2 查重语句

SELECT
	attribute_name
FROM
 	table_name
GROUP BY
  	attribute_name
HAVING
  	COUNT(attribute_name) > 1;

3.3 前N个语句

SELECT
  	*
FROM 
  	table_name
ORDER BY 
  	attribute_anme DESC
LIMIT 
  	n 
OFFSET 
  	n

3.4 CASE…END判断语句

CASE 
  WHEN 条件1 THEN 结果1
  WHEN 条件2 THEN 结果2
  WHEN 条件3 THEN 结果3
  .........
  WHEN 条件N THEN 结果N
END

4 筛选语句 WHERE

4.1 语法

SELECT 
	attribute_name
FROM
	table_name
WHERE 
	attribute_name operator value

属性名不要求相同。

4.2 运算符/通配符/操作符

operator描述
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式

5 分组语句 GROUP BY

5.1 语句解释

GROUP BY语句根据一个或多个列对结果集进行分组。

SELECT 
	attribute_name
FROM
	table_name
WHERE 
	attribute_name operator value
GROUP BY 
	attribute_name

属性名不要求相同。

5.2 HAVING子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
示例:

SELECT 
	attribute_name, aggregate_function(attribute_name)
FROM 
	table_name
WHERE 
	attribute_name operator value
GROUP BY 
	attribute_name
HAVING 
	aggregate_function(attribute_name) operator value

6 排序语句 ORDER BY

ORDER BY语句用于根据指定的列对结果集进行排序。默认按照升序,添加DESC关键字可改成降序。

6.1 正序、逆序

SQL默认按照升序(ASC),添加DESC关键字可改成降序。

7 函数

7.1 时间函数

dayofweek():返回date为星期几,odbc标准,周天为1
weekday():返回date为星期几
dayofmonth():月中第几日
dayofyear():年中第几日
month():返回月份
dayname():星期英文名
monthname():月份英文名
quarter():一年的第几个季度
week(date,first):为一年的第几周,default:first:=0,周日开始,1为从周一开始…
year():返回年份
hour():返回小时
minute():返回分钟
second():返回秒数
period_add():增加月份
period_diff():相差的月份
date_add(date,interval expr type):增加对应的时间单位
date_sub(date,interval expr type):减去对应的时间单位
date_format():字符串格式化date
now():返回当前datetime
curdate():当前date
curtime():当前time

7.2 数值函数

abs(x):绝对值
ceil(x):大于数值的最大整数
floor(x):小于数值的最大整数
mod(x, y):取余
rand():[0,1)区间的随机小数
round(x, y):返回参数x四舍五入后的有y位小数的结果
truncate(x, y):返回参数x截断为y位小数的结果

7.3 字符串函数

concat():连接字符串
insert():替换子串内容
lower():所有字母小写
upper():所有字母大写
left():返回最左边的字符
right():返回最右边的字符
lpad():最左端填充n个长度的字符串
rpad():最右端填充n个长度的字符串
ltrim():去左边空格
rtrim():去右边空格
trim():去左右空格
repeat():返回重复n次的字符串
replace():替换子串内容
strcmp():比较两个字符串
substring():取子串

8 SQL注释

SQL语句中的单行注释使用--,多行注释采用/*…*/

9 SQL代码规范

[SQL编程格式的优化建议] https://zhuanlan.zhihu.com/p/27466166
[SQL Style Guide] https://www.dsqlstyle.guide/

10 作业

10.1 查找重复的电子邮箱(难度:简单)

  1. 创建表,表名accounts。再输入records。
    CREATE TABLE email (
    ID INT NOT NULL PRIMARY KEY,
    Email VARCHAR(255)
    );
    
    INSERT INTO email VALUES('1','a@b.com');
    INSERT INTO email VALUES('2','c@d.com');
    INSERT INTO email VALUES('3','a@b.com');
    
    Yeah,这就成了。
    在这里插入图片描述
  2. 查重
    SELECT 
    	Email 
    FROM 
    	accounts
    GROUP BY
    	Email
    HAVING
    	COUNT(Email)>1;
    
    查找结果:
    在这里插入图片描述

10.2 查找大国

  1. 建表,表名world。再输入records。
    CREATE TABLE World (
    name VARCHAR(50) NOT NULL,
    continent VARCHAR(50) NOT NULL,
    area INT NOT NULL,
    population INT NOT NULL,
    gdp INT NOT NULL
    );
    
    INSERT INTO World
      VALUES('Afghanistan','Asia',652230,25500100,20343000);
    INSERT INTO World 
      VALUES('Albania','Europe',28748,2831741,12960000);
    INSERT INTO World 
      VALUES('Algeria','Africa',2381741,37100000,188681000);
    INSERT INTO World
      VALUES('Andorra','Europe',468,78115,3712000);
    INSERT INTO World
      VALUES('Angola','Africa',1246700,20609294,100990000);
    
  2. 查找大国(条件:国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万))
    SELECT
    	name, population, area
    FROM
    	world
    WHERE
    	area > 3000000 OR (population > 25000000 and GDP > 20000000);
    
    Here we go!
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值