sql知识集锦

sql执行顺序
sql知识集锦_第1张图片
SELECT 的执行顺序

关键字的顺序是不能颠倒的:
SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …

2.SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7

SQL

1.将查询结果插入到另一张表中

INSERT INTO

如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件;

如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表(字段1, 字段2, ...)SELECT 字段1, 字段2, ... FROM 来源表 WHERE 条件;

2.日期

将datetime转换为timestamp格式,使用UNIX_TIMESTAMP()函数;
将timestamp转换为datetime格式,使用FROM_UNIXTIME()函数;

将现在数据库的datetime时间转换为timestamp格式:
select UNIX_TIMESTAMP(now()) from dual
select UNIX_TIMESTAMP(‘2020-08-08’) from dual
select UNIX_TIMESTAMP(‘20200808’) from dual

日期比较大小

 select order_no from order_info where
        enterprise_id = #{enterpriseId}
        and create_date= ]]> #{startTime}
        and create_date  #{endTime}

sql知识集锦_第2张图片

SELECT CURRENT_DATE(),运行结果为 2019-04-03。
SELECT CURRENT_TIME(),运行结果为 21:26:34。
SELECT CURRENT_TIMESTAMP(),运行结果为 2019-04-03 21:26:34。
SELECT EXTRACT(YEAR FROM '2019-04-03'),运行结果为 2019。
SELECT DATE('2019-04-01 12:00:05'),运行结果为 2019-04-01。

DATE_FORMAT()
DATE_FORMAT(date,format)函数用于以不同的格式显示日期/时间数据。 date是日期列,format是格式

%W 星期名字(Sunday……Saturday)  
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)  
%Y 年, 数字, 4 位  
%y 年, 数字, 2 位  
%a 缩写的星期名字(Sun……Sat)  
%d 月份中的天数, 数字(00……31)  
%e 月份中的天数, 数字(0……31)  
%m 月, 数字(01……12)  
%c 月, 数字(1……12)  
%b 缩写的月份名字(Jan……Dec)  
%j 一年中的天数(001……366)  
%H 小时(00……23)  
%k 小时(0……23)  
%h 小时(01……12)  
%I 小时(01……12)  
%l 小时(1……12)  
%i 分钟, 数字(00……59)  
%r 时间,12 小时(hh:mm:ss [AP]M)  
%T 时间,24 小时(hh:mm:ss)  
%S 秒(00……59)  
%s 秒(00……59)  
%p AM或PM  
%w 一个星期中的天数(0=Sunday ……6=Saturday )  
%U 星期(0……52), 这里星期天是星期的第一天  
%u 星期(0……52), 这里星期一是星期的第一天  
%% 一个文字“%”。  

SELECT NOW(),CURDATE(),CURTIME()

NOW()					CURDATE()			CURTIME()
2008-12-29 16:25:46		2008-12-29			16:25:46

3.修改字段
增加字段
ALTER TABLE <表名> ADD COLUMN <新字段名><数据类型>[约束条件]

-- 给actor表首位添加create_date字段
ALTER TABLE actor ADD COLUMN create_date datetime not null DEFAULT '2020-10-01 00:00:00' FIRST;

删除字段
ALTER TABLE <表名> DROP COLUMN <字段名>

-- 将actor_new表的actor_id字段删除
alter table actor_new drop column actor_id;

修改字段
1.修改字段名
ALTER TABLE <表名> RENAME COLUMN A to B

-- 将actor_new表的first_name字段名修改为first_name_new
alter table actor_new rename column first_name to first_name_new;

2.修改字段类型

ALTER TABLE <表名> MODIFY COLUMN <字段名> <类型>

-- 将last_name字段数据类型由varchar(45)修改为char(45)
alter table actor_new modify column last_name char(45) not null;

3.修改字段默认值

ALTER TABLE <表名> ALTER COLUMN <字段名> SET DEFAULT <默认值>

若字段有默认值,则需要先删除字段的约束,在添加新的默认值
根据约束名称删除约束
alter table <表名> alter column <字段名> drop default

-- 若本身存在默认值,则先删除
alter table actor_new alter column last_name drop default; 
-- 给last_name添加默认值'洛'
alter table actor_new alter column last_name set default '洛';

3.索引
alter 语句在已经存在的表上创建索引语法

alter table [表名] add index [索引名]

使用 CREATE TABLE 语句创建索引语法:

create index [索引名] ON [表名]

4.字符串
字符串连接

update design_tag set platform_id = CONCAT(platform_id,',99995438')  where yn=1 

sql知识集锦_第3张图片

SELECT CONCAT('abc', 123),运行结果为 abc123。
SELECT LENGTH('你好'),运行结果为 6。
SELECT CHAR_LENGTH('你好'),运行结果为 2。
SELECT LOWER('ABC'),运行结果为 abc。
SELECT UPPER('abc'),运行结果 ABC。
SELECT REPLACE('fabcd', 'abc', 123),运行结果为 f123d。
SELECT SUBSTRING('fabcd', 1,3),运行结果为 fab。

5.联表查询
select p.FirstName, p.LastName, a.City, a.State from Person as p left join Address as a on p.PersonId = a.PersonId

6.插入记录
insert into 表名 () VALUES ()

7.数学运算
sql知识集锦_第4张图片

SELECT ABS(-2),运行结果为 2。
SELECT MOD(101,3),运行结果 2。
SELECT ROUND(37.25,1),运行结果 37.3。

你可能感兴趣的:(sql,数据库)