要多使用)"/>
sql学习(要多使用)
sql简介
1、sql是用于访问和处理数据库的标准的计算机语言。
2、sql是用于管理关系数据库管理系统。sql的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
use RUNOOB; 命令用于选择数据库。
set names utf8; 命令用于设置使用的字符集。
SELECT * FROM Websites; 读取数据表的信息。
一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
select
例如有一个"Websites" 表
select * from Websites; 代表从这个表中选取所有的列
select name,country from Websites;代表从Websites表中选取name和country列
select distinct
DISTINCT 关键词用于返回唯一不同的值
select distinct country from websites; 代表从websites表中的country列中选取唯一不同的值,就是去掉country列重复值
where子句
用于提取那些满足指定条件的记录
下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 的所有网站
select * from websites where country = ‘CN’
sql使用单引号来环绕文本值,如果是数值字段,请不要使用引号
where子句中的运算符
<>不等于
= 等于
>大于
<小于
>=大于等于
<=小于等于
between 在某个范围内
like 搜索某种模式
in 指定针对某个列的多个可能值
逻辑运算
and or not
and:同时满足两个条件的值
select * from emp where sal >2000 and sal < 3000;
查询emp表中sql大于2000并且小于3000的值。
or:或满足其中一个条件的值
select * from emp where sal >2000 or comm>500;
查询emp表中sal大于2000或者comm大于500的值。
or 自带去重的效果
not:非 满足不包含该条件的值
select * from emp where not comm>500;
查询emp表中comm小于等于500的值。
特殊条件
1、空值判断:is null
select * from emp where comm is null
查询emp表中comm列中的空值。
过滤不为空的信息
select * from emp where comm is not null
2、between and(在 之间的值)
select * from emp where sal between 1500 and 3000;
查询emp表中sal列中大于1500小于1300的值。
3、in(在一个非连续的范围内)
select* from emp where sal in (5000,3000,1500);
查询emp表中sal列中等于5000,3000,1500的值。
4、like(%表示任意多个字符 _表示一个任意字符)
select* from emp where ename like ‘m%’;
查询emp表中ename列中有m的值,m为要查询内容中的模糊信息。
order by
关键字用于对结果集按照一个列或者多个列进行排序
关键字默认按照升序对记录进行排序,如果需要按照降序对记录进行排序,可以使用DESC关键字。
下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列排序:
SELECT * FROM Websites ORDER BY alexa;
下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列降序排序:
SELECT * FROM Websites ORDER BY alexa DESC;
下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “country” 和 “alexa” 列排序:
SELECT * FROM Websites ORDER BY country,alexa;
INSERT INTO语句
用于向表中插入新记录
1、第一种无需指定要插入的列名。只需提供被插入的值即可
insert into table_name values(value1,value2,value3)
2、第二种需要指定列名及要插入的值
insert into table_name (id,name)values(1,小小)
update语句
用于更新表中已经存在的记录
假设要把‘菜鸟教程中’的alexa排名更新为5000,country改为USA
update websites set alexa=5000,country=USA where name= ‘菜鸟教程’
delete语句
用于删除表中的行
delete from websites where name= ‘book’ and country = ‘USA’
select top,limit,rownum子句
top子句用于规定要返回的记录的数目。
top子句对于拥有数千条记录的大型表来说。是非常有用的。
但是并非所有的数据库系统都支持select top语句。mysql支持limit语句来选取指定的条数数据。oracle可以使用rownum来选取。
mysql语法
select * from web limit 5;查看web表前五条。
oracle语法
select * from persons where runoob <=5;
like操作符
用于在where子句中搜索列中的指定模式。
选取name以字母g开始的所有客户
select * from websites where name like ‘G%’
选取name以字母k结尾的所有客户
select * from websites where name like ‘%k’
选取name包含模式00的所有客户
select * from websites where name like ‘%00%’
通过not关键字,选取不匹配模式的记录
select * from websites where name not like ‘%00%’
通配符
在sql中 通配符与sql like操作符一起使用
% 替代0或多个字符
_替代一个字符
[charlist] 字符列中的任何单一字符
[ ^charlist] 或[!charlist] 不在字符列中的任何单一字符
以字母‘https’开始的所有网站
select * from websites where like ‘https%’
SQL 语句选取 url 包含模式 “oo” 的所有网站:
select * from websites where like ‘%00%’
下面的 SQL 语句选取 name 以一个任意字符开始,然后是 “oogle” 的所有客户:
select * from websites where like ‘_oogle’
下面的 SQL 语句选取 name 以 “G” 开始,然后是一个任意字符,然后是 “o”,然后是一个任意字符,然后是 “le” 的所有网站:
select * from websites where like ‘G_o_le’
使用 SQL [charlist] 通配符
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
下面的 SQL 语句选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP ‘1’;
下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP ‘[A-H]’;
sql语句 in
下面的 SQL 语句选取 name 为 “Google” 或 “菜鸟教程” 的所有网站:
SELECT * FROM Websites where name in ( “Google” , “菜鸟教程”)
sql between操作符
用于选取介于两个值之间的数据范围之内的值
下面的 SQL 语句选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites where alexa between 1 and 20;
sql别名
创建别名是为了让列名称的可读性更强
列的sql别名
select column_name AS alias_name from table_name;
表的sql别名语法
select column_name(s) from table_name AS alias_name;
SELECT NAME AS a,address AS b FROM threat_point 列别名
我们把三个列(url、alexa 和 country)结合在一起,并创建一个名为 “site_info” 的别名
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites; 多个列名组合在一起
concat(将多个字段拼接为一个字段)
SELECT Websites.name, Websites.url, access_log.count, access_log.date FROM Websites, access_log
WHERE Websites.id=access_log.site_id and Websites.name=“菜鸟教程”; 多表多列
查找最大值用max函数
运营想要知道复旦大学学生gpa最高值是多少
select max(gpa) from user_profile where university =‘复旦大学’
最小值函数
min()
统计函数
count(*)
平均值函数
avg(*)
求和函数
sum()
分组group by
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
group_concat(字段名) 根据分组的结果,使用group_concat(字段名)来放置每一个分组中某字段的集合
select gender,GROUP_CONCAT(name) from students group by gender;
round()函数
用于把数值字段舍入为指定的小数位数
比如round(列名,2)
聚合函数作为筛选条件时,不能用where,而是用having语法
where 从记录中法过滤出某一条记录
having 可以从一组组记录中过滤掉其哪几组
-WHERE 用在group by前,having在group by之后
查找男生人数以及平均gpa,同时对列名进行别名
select count(gender) as male_num,avg(gpa) as avg_gpa from user_profile where gender=‘male’
join
用于把两个或多个表的行连接起来
当两张表连接起来,没有任何限制的情况下,就会出现笛卡尔积现象(这是一种数学现象)
inner join
在表中存在至少一个匹配时返回行
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
where条件是在临时表生成好后,再对临时表进行过滤的条件,这时已经没有left join的含义,条件不为真的就全部过滤掉。
union和union all
UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
CASE函数
是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
分为:
简单CASE函数
搜索CASE函数
现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量
--简单Case函数
CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
两者区别:这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
select device_id,gender,CASE when age >= 25 THEN '25岁及以上'when age >= 20 THEN '20-24岁'when age < 20 THEN '20岁以下'else '其他'end as age_cut
from user_profile
year/month函数
year(date)=2021 and month(date)=8
selectday(date) as day,count(question_id) as question_cnt
from question_practice_detail
where month(date)=8 and year(date)=2021
group by date
day函数
DAY函数返回指定日期的日的部分
A-H ↩︎
更多推荐
sql学习(要多使用)
发布评论