一·SQL是什么?
sql是结构化查询语言,是数据库管理和数据分析领域中非常流行和重要的技能。
二·数据库概念:
数据库(Database):存储数据的容器。
表(Table):数据库中存储数据的表格,由行(记录)和列(字段)组成。
行(Row):表中的单个记录。
列(Column):表中的字段,每一列都包含相同类型的数据。
主键:表中的每一行都应该有一列(或几列)可以唯一标识自己。
三·数据类型
文本(如 VARCHAR, CHAR, TEXT)
数字(如 INT, FLOAT, DECIMAL)
日期和时间(如 DATE, TIME, DATETIME)
二进制数据(如 BLOB, VARBINARY)
四·基础语句
检索单列:
select prod_name
from products;
检索多列:
select pro_id, prod_name, prod_price
from products;
检索所有列:
select*
from products;
去除重复列:
select distinct vend_id
from products;
限制结果:
select top 5 prod_name
from products;
select prod_name
from products
limit 5;
select prod_name
from products
limit 5 offset 5
order by 排序:
order by默认升序
单列
select prod_name
from products
order by prod_name;
多列
select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;
按列位置:
select prod_id, prod_price, prod_name
from products
order by 2,3;
按prod_price, prod_name排序
指定排序方向:
select prod_id, prod_price, prod_name
from products
order by prod_price desc
desc--表示降序;同时desc关键字只应用到直接位于其前面的列民
使用where过滤数据
select prod_name, prod_price
from products
where prod_price = 3.49;
order by 位于where之后
where子句操作符:
=等于
<>不等于
!=不等于
<小于
<=小于等于
!<不小于
>大于
>=大于等于
!>不大于
between 在指定的两个值之间
is null 为null值
检查单个值:
select prod_name, prod_price
from products
where prod_price <10;
不匹配检查
select vend_id, prod_name
from products
where vend_id <> 'DLL01'
字符串需要用引号"",或者''
操作符(and, or, in, not, like)
and操作符,or操作符;优先处理and操作符;使用圆括号()对操作符进行明确分组
in操作符---用来确定条件范围- where vend_id in ('DLL01','BRS01')
NOT操作符--where not vend_id = 'DLL01' = where vend_id <>'DLL01'
like操作符:
通配符:
%----表示任何字符出现任意次数
where prod_name like ' fish%'; ---所有带fish的结果都被检索
_ 表示任意单个字符
Regexp: regular expression搜索字符串—正则表达式
Select*
From customers
Where last_name like ‘%field%’—之内含有field
等同于:Where last_name Regexp ‘field’
-^字符串开头
‘^field’—开头是field
‘field$’—结尾时field
$—end with
|并列;表示多个搜索模式or
Where last_name regexp ‘ field | Mac’
有Mac或者field
Where last_name regexp ‘[gim]e’
确保在字母e前要有g,i两者之一
用到方括号 []
—Where last_name regexp ‘[gim]e’
对应了任何姓氏里有ge或者ie或者me的顾客
Where last_name regexp ‘ e[fmq]’
Where last_name regexp ‘[a-h]e’
A到h字母
—^ beginning —任意字母开头—‘^field’—以field为开头
—$ end结尾
|—logical or并列or‘ field|Mac|rose’
—[abcd ] 列举‘[gim]e’—ge, ie, me
—[a-f]范围,同上
函数:
常用文本处理函数:
left()返回字符串左边的字符
right()返回字符串右边的字符
upper()将字符串大写
lower()将字符串小写
length()返回字符串的长度
ltrim()去掉字符串左边的字符
rtrim()去掉字符串右边的字符
substr()/substring()提取字符串的组成部分
数值处理函数:
abs()返回一个数的绝对值
cos()返回一个角度的余弦
exp()返回一个数的指数值
pi()返回圆周率的值
sin()返回一个角度的正弦
sqrt()返回一个数的平方根
tan返回一个角度的正切
汇集数据:聚集函数
avg()平均值
count()返回某列的行数
max()最大值
min()最小值
sum()某列值之和
聚集不同值:distinct不可用于count()
数据分组
group by ---用于统计不同类别物品的各自数量
select vend_id, count(*) as num_prods
from products
group by vend_id;
GROUP BY vend_id:
GROUP BY 子句用于将结果集分组。在这个例子中,它将结果集按照 vend_id 的值进行分组。
这意味着对于每个不同的 vend_id,count(*) 函数会计算该供应商的所有产品数量,并将这个数量作为 num_prods 列的值。
过滤分组
having 子句--适用对分组后的数据进行过滤。
select cust_id, count(*) as orders
from Orders
group by cust_id
having count(*)>=2;
having子句在此处过滤列count(*)>=2的那些分组
HAVING
类似于 WHERE
,但用于筛选聚合数据,但是where 在数据分组前进行过滤,having在数据分组后进行过滤。
select 子句顺序:
select
from
where
group by
having
order by
联结:
where-限定条件
关联表之间必须有相同的字段
内连接--inner join
—只返回两个表中都有的数据
左连接left join
—返回左表中所有的数据和右表中匹配的数据,右表中没有的数据用null填充.
右连接right join
—返回右表中所有的数据和左表中匹配的数据,左表中没有的数据用null填充
On—关键字和两个表中的关联的字段
Where关键字和查询条件
Union—结合上下操作
Union并列多个查询结果,利用union,可给出多条的select语句,将它们的结果组合成一个结果集;union必须由两条或两条以上的select语句组成,语句之间用union进行分隔;union中的每个查询必须包含相同的列、表达式或聚集函数。
union all不取消重复的行数;而union会从查询结果集中自动去除重复的行
插入数据:
insert 语法:
insert into Customers
Values ( 10000006,
'Toy Land',
'123 Tree Street',
'New York',
'111111'
'usa',
null,
null);
将一个新顾客插入到customers表中。储存到表中每一列数据在values子句中给出。
insert into customers(cust_id,
cust_name,
cust_city,
cust_state,
cust_email)
values(10000006,
'Toy Land',
'New York',
'NY',
null);
更新数据:
使用update语句:
确定要更新的表;列名和它们的新值;确定要更新那些行的过滤条件
update customers
set cust_email = 'kim@thetoystore.com'
where cust_id = 10000005;
update语句总是以要更新的表名开始;set命令用来将新值赋给被更新的列。
update语句以where子句结束,告诉更新哪一行
删除数据:
使用delete语句:从表中删除特定的行;从表中删除所有行
delete from customers
where cust_id = 100006;
创建表:
使用create table创建表:
create table products
(prod_id char(10) not null,
vend_id. char(10) not null,
prod_name char(10) not null,
prod_price decimal(8,2) not null,
);
null值就是没有值,或者缺失值;null不是空字符串,不需要‘’