【SQL基础】


基础

  • 数据库语言对大小写不敏感,用分号分隔每条数据库语言,用逗号分隔每个列名

数据库命令

常用命令

select
update
delete
insert into
create database
alter database
create table
alter table
drop table
create index
drop index

参考
https://blog.csdn.net/weixin_40567826/article/details/78612681
https://www.jianshu.com/p/8a511291a29d
https://blog.csdn.net/akaks0/article/details/81433801

select查询命令

1. 基础 select语句

select column1,column2 from table_name; -- 查询table_name表中的column1和column2这两列

select distinct语句

(一个列中可能包含重复值,select distinct用于返回唯一不同值)

select distinct column_name,column_name from table_name; 

select limit语句

(限制输出结果,只输出前几行,无需全部输出)

select column_name from table_name
LIMIT 4 OFFSET 3;  -- offset 3表示从第3行开始,limit 4表示输出前4行。

也可以简写成:(逗号前是offset,逗号后是limit)

LIMIT 3, 4; 

order by

注意事项:
(1)用于对结果集按照一个列或多个列进行排序,默认按升序(asc)排序,若要用降序,可以使用desc关键字,但是要注意,desc只应用到直接位于其前面的列名,如果想要在多个列上进行降序,必须对每一列指定desc。
(2)可以使用非检索的列进行排序
(3)order by子句必须是select语句中的最后一条子句,否则会报错!
(4)当使用多个列进行排序时,只有当第一个列的值相同时,才会依次比较后面的列。
(5)除了使用列名排序,也可以使用列号排序(...order by 2;也是合法的,表示按第2列排序)

select column_name1,column_name2
from table_name
order by column_name1,column_name2 ASC|DESC;
# order by column_name1 DESC,column_name2;  只对column_name1降序,对column_name2依然升序

where子句

使用where子句可以对搜索条件进行过滤,where子句的位置在from子句之后。

select prod_name,prod_price
from table_name
where prod_price <= 10;  # 只列出单价小于10的行
where prod_price between 5 and 10;  # 列出5-10之间的
where prod_price <> 10;  # 列出不等于10的
where prod_price is null; # 返回所有没有价格(空字段,不是价格为0)的行

where子句也可以组合使用,有两种连接符,一个是and,一个是or,连接符可以混用,and的优先级更高,可以使用()操作对操作符分组。

select prod_name,prod_price
from table_name
where prod_name = 'id01' and prod_price <= 10 and ...; --可以有多个条件,用and连接即可  
where (prod_name = 'id01' or prod_name = 'id02') and prod_price > 10; #如果不加括号,and优先级更高

not操作符——否定后面的任何条件

select prod_name,prod_price
from table_name
where not prod_name = 'id01';

in操作符——指定条件范围

select prod_name,prod_price
from table_name
where prod_name in ('id01','id02');

通配符

%——表示任何字符出现任意次数
_——匹配任意字符,单只匹配单个字符
[]——用来指定一个字符集,必须匹配指定位置的一个字符

+或 ||——字段拼接
AS关键字——别名

函数

Now()——返回挡墙的日期和时间

  1. 文本处理函数

Left():返回串左边的值
Right():返回串右边的值
Length():返回串的长度
Upper():将串转换为大写
Lower():将串转换为小写
Trim():去除串两边的空格
LTrim():去除串左边的空格
RTrim():去除串右边的空格
SubString():返回子串的字符
Locate():找出串的一个子串
Soundex():返回串的SOUNDEX值(SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法)

  1. 聚集函数

Avg()——返回列的平均值
Count()——返回某列的行数
Max()——返回某列的最大值
Min()——返回某列的最小值
Sum()——返回某列值之和

(1)上述五个函数都忽略空行(对Null行不做处理)(count(*)不忽略空行,连空行也算在内)
(2)指定Distinct参数,可以只计算那些不重复的值。
(3)五个函数可以混用

# 用单条select语句执行4个聚集运算
select count(*) as num_items, min(price) as price_min, max(price) as price_max, avg(price) as price_avg;

Group by

使用group by可以将数据分为多个逻辑组,对每个组进行聚集计算。

group by的位置:where子句之后,order by子句之前。

having——过滤分组,having必须与group by结合使用,用于对分组进行过滤(与where不同的是,where过滤的是行)

select子句顺序

子句说明是否必须使用
select要返回的列或表达式
from从中检索数据的表仅在从表选择数据时使用
where行级过滤
group by分组说明仅在按组计算聚集时使用
having组级过滤
order by输出排序顺序

书写顺序
SELECT 子句 → 2. FROM 子句 → 3. WHERE 子句 → 4. GROUP BY 子句 → HAVING 子句 → 6. ORDER BY 子句

创建联结

select col1, col2, col3
from table1, teble2  # 待联结的两个表
where table1.id == table2.id; # 联结方式

等价写法:

select col1, col2, col3
from table1 inner join teble2  # 待联结的两个表
on table1.id == table2.id; # 联结方式

inner join是内联结,outer join是外联结,联结条件用特定的on子句来替换where子句。

union操作

insert

可以不写列名,只写表名,这样插入的值是按顺序的,如果不够了后面都是NULL,也可以指定列表,对指定的几列进行插入。

insert into table_name
values(value1,value2,value3,...)

insert select——插入检索出来的数据,将select检索出来的结果insert进去

insert into table_name(id, email, name)
select id, email, name from old_table_name;

select into——将一个表复制到另一个表

select *
into copy_table
from table;

update更新数据

update table_name
set email = 'sam@land.com'
name = 'sam'
where id = '100001';  # 只更新这一行,如果不加where,更新的是所有行

delete删除数据

delete from table_name
where id = '100001';  # 只删除这一行,如果不加where,删除的是所有行,但是并不删除表本身

如果想要删除整张表,使用truncate table语句更快。

create table创建表

使用create table创建新表,表中包含三列,id,name,email,三列的数据都是char类型的,其中id和name列不允许插入null值,否则会报错,email列没有这一限制。
id这一列的默认值为1.

create table table_name
(
	id	char(10)	not null	default 0,
	name	char(10)	not null,
	email	char(50),
);

alter table更新表

这里的更新指的是,更新表的定义。比如插入一列,

drop table删除表

drop table table_name; # 永久删除该表
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值