数据库命令
常用命令
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 column1,column2 from table_name; -- 查询table_name表中的column1和column2这两列
(一个列中可能包含重复值,select distinct用于返回唯一不同值)
select distinct column_name,column_name from table_name;
(限制输出结果,只输出前几行,无需全部输出)
select column_name from table_name
LIMIT 4 OFFSET 3; -- offset 3表示从第3行开始,limit 4表示输出前4行。
也可以简写成:(逗号前是offset,逗号后是limit)
LIMIT 3, 4;
注意事项:
(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子句的位置在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()
——返回挡墙的日期和时间
Left():返回串左边的值
Right():返回串右边的值
Length():返回串的长度
Upper():将串转换为大写
Lower():将串转换为小写
Trim():去除串两边的空格
LTrim():去除串左边的空格
RTrim():去除串右边的空格
SubString():返回子串的字符
Locate():找出串的一个子串
Soundex():返回串的SOUNDEX值(SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法)
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的位置:where子句之后,order by子句之前。
having——过滤分组,having必须与group by结合使用,用于对分组进行过滤(与where不同的是,where过滤的是行)
子句 | 说明 | 是否必须使用 |
---|---|---|
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操作
可以不写列名,只写表名,这样插入的值是按顺序的,如果不够了后面都是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 table_name
set email = '[email protected]'
name = 'sam'
where id = '100001'; # 只更新这一行,如果不加where,更新的是所有行
delete from table_name
where id = '100001'; # 只删除这一行,如果不加where,删除的是所有行,但是并不删除表本身
如果想要删除整张表,使用truncate 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),
);
这里的更新指的是,更新表的定义。比如插入一列,
drop table table_name; # 永久删除该表