sql学习速成笔记-基础版

一·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不是空字符串,不需要‘’

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值