æ¦è¦
æ§è¡é¡ºåº
# 书å顺åº
select distinct
< select_list>
from
<left_table> <join_type>
join <right_table> on <join_condition>
where
<where_condition>
group by
<group_by_list>
having
<having_condition>
order by
<order_by_condition>
limit <limit_number>
# æ§è¡é¡ºåº
from <left_table>
on <join_condition>
<join_type> join <right_table>
where
<where_condition>
group by <group_by_list>
having <having_condition>
select
distinct < select_list>
order by <order_by_condition>
limit <limit_number>
å表约æ
# 主é®çº¦æï¼PRIMARY KEY è¦æ±è¢«è£
饰çåæ®µï¼å¯ä¸åé空
# å¯ä¸çº¦æï¼UNIQUE è¦æ±è¢«è£
饰çåæ®µï¼å¯ä¸ï¼
# .èåå¯ä¸ï¼å¨ç»å°¾ï¼unique(åæ®µ1ï¼å段2)
# é空约æï¼NOT NULL è¦æ±è¢«è£
饰çåæ®µï¼é空
# å¤é®çº¦æï¼FOREIGN KEY æä¸»è¡¨çå¤é®
# èªå¨å¢å ï¼AUTO_INCREMENT èªå¨å¢å (éè¦åä¸»é® PRIMARY KEY åæ¶ç¨)
# 设置é»è®¤å¼: DEFAULT ä¸ºè¯¥å±æ§è®¾ç½®é»è®¤å¼
# å¨intãcharä¸ï¼zerofill ä¸è¶³ä½æ°é»è®¤å¡«å
0
å¸¸ç¨æ°æ®ç±»å
æ°å¼ç±»å
ç±»å | å¤§å° | èå´ï¼æç¬¦å·ï¼ | èå´ï¼æ 符å·ï¼ | ç¨é |
---|---|---|---|---|
TINYINT | 1 byte | (-128ï¼127) | (0ï¼255) | å°æ´æ°å¼ |
SMALLINT | 2 bytes | (-32 768ï¼32 767) | (0ï¼65 535) | å¤§æ´æ°å¼ |
MEDIUMINT | 3 bytes | (-8 388 608ï¼8 388 607) | (0ï¼16 777 215) | å¤§æ´æ°å¼ |
INTæINTEGER | 4 bytes | (-2 147 483 648ï¼2 147 483 647) | (0ï¼4 294 967 295) | å¤§æ´æ°å¼ |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808ï¼9 223 372 036 854 775 807) | (0ï¼18 446 744 073 709 551 615) | æå¤§æ´æ°å¼ |
FLOAT | 4 bytes | (-3.402 823 466 E+38ï¼-1.175 494 351 E-38)ï¼0ï¼(1.175 494 351 E-38ï¼3.402 823 466 351 E+38) | 0ï¼(1.175 494 351 E-38ï¼3.402 823 466 E+38) | å精度 æµ®ç¹æ°å¼ |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308ï¼-2.225 073 858 507 201 4 E-308)ï¼0ï¼(2.225 073 858 507 201 4 E-308ï¼1.797 693 134 862 315 7 E+308) | 0ï¼(2.225 073 858 507 201 4 E-308ï¼1.797 693 134 862 315 7 E+308) | å精度 æµ®ç¹æ°å¼ |
DECIMAL | 对DECIMAL(M,D) ï¼å¦æM>Dï¼ä¸ºM+2å¦å为D+2 | ä¾èµäºMåDçå¼ | ä¾èµäºMåDçå¼ | å°æ°å¼ |
æ¥æåæ¶é´ç±»å
ç±»å | å¤§å° ( bytes) | èå´ | æ ¼å¼ | ç¨é |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | æ¥æå¼ |
TIME | 3 | â-838:59:59â/â838:59:59â | HH:MM:SS | æ¶é´å¼ææç»æ¶é´ |
YEAR | 1 | 1901/2155 | YYYY | å¹´ä»½å¼ |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | æ··åæ¥æåæ¶é´å¼ |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038ç»ææ¶é´æ¯ç¬¬ 2147483647 ç§ï¼å京æ¶é´ 2038-1-19 11:14:07ï¼æ ¼æå°¼æ²»æ¶é´ 2038å¹´1æ19æ¥ åæ¨ 03:14:07 | YYYYMMDD HHMMSS | æ··åæ¥æåæ¶é´å¼ï¼æ¶é´æ³ |
å符串类å
ç±»å | å¤§å° | ç¨é |
---|---|---|
CHAR | 0-255 bytes | å®é¿å符串 |
VARCHAR | 0-65535 bytes | åé¿å符串 |
TINYBLOB | 0-255 bytes | ä¸è¶ è¿ 255 个å符çäºè¿å¶å符串 |
TINYTEXT | 0-255 bytes | çææ¬å符串 |
BLOB | 0-65 535 bytes | äºè¿å¶å½¢å¼çé¿ææ¬æ°æ® |
TEXT | 0-65 535 bytes | é¿ææ¬æ°æ® |
MEDIUMBLOB | 0-16 777 215 bytes | äºè¿å¶å½¢å¼çä¸çé¿åº¦ææ¬æ°æ® |
MEDIUMTEXT | 0-16 777 215 bytes | ä¸çé¿åº¦ææ¬æ°æ® |
LONGBLOB | 0-4 294 967 295 bytes | äºè¿å¶å½¢å¼çæå¤§ææ¬æ°æ® |
LONGTEXT | 0-4 294 967 295 bytes | æå¤§ææ¬æ°æ® |
char(n) å varchar(n) 䏿¬å·ä¸ n 代表å符ç个æ°ï¼å¹¶ä¸ä»£è¡¨åè个æ°ï¼æ¯å¦ CHAR(30) å°±å¯ä»¥åå¨ 30 个å符
常è§è®¾ç½®åæä½
æå¡å¨åé ç½®
æå¡å¨è®¾ç½®è¿ç¨è®¿é®
Linux䏿°æ®åºçåºæ¬æä½å½ä»¤
å¯å¨ï¼service mysql start
忢ï¼service mysql stop
éå¯ï¼service mysql restart
æ¸
å±ï¼clear,reset
å¤ä»½æ°æ®åº
æ¢å¤å¤ä»½çæ°æ®åº
# é¦å
å¨mysqléå»ºå¥½æ°æ®åºå
# mysql -uroot -på¯ç æ°æ®åºå < D:/å¤ä»½æä»¶å.sql
æ¥è¯¢binlogæ¥å¿æ¯å¦å¼å¯
åºæ¬æä½
æ¥çæ°æ®å表
show databases; # æ¥çæææ°æ®åº
show create table 表å; # æ¥ç表çå建ç»è
desc 表å; # æ¥çè¡¨ç»æ
è¿å ¥æ°æ®åº
# use æ°æ®å
use localdb
åå»ºæ°æ®åº
# CREATE DATABASE æ°æ®åºå
CREATE DATABASE localdb;
CREATE DATABASE localdb charset utf8;
# ä¿®æ¹æ°æ®åºç¼ç
alter database localdb charset gbk;
å 餿°æ®åº
# drop database éè¦å é¤çæ°æ®åºå
drop database localdb;
åå»ºæ°æ®åºå¹¶è®¾ç½®æ°æ®é
CREATE DATABASE xxxname CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
导åºsqlèæ¬ä¸ï¼åå»ºæ°æ®åºå¹¶å建表
SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE spiderflow;
USE spiderflow;
DROP TABLE IF EXISTS `sp_flow`;
CREATE TABLE `sp_flow` (
`id` varchar(32) NOT NULL,
`name` varchar(64) DEFAULT NULL COMMENT 'ä»»å¡åå',
`xml` longtext DEFAULT NULL COMMENT 'xml表达å¼',
`cron` varchar(255) DEFAULT NULL COMMENT 'corn表达å¼',
`enabled` char(1) DEFAULT '0' COMMENT '任塿¯å¦å¯å¨,é»è®¤æªå¯å¨',
`create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´',
`last_execute_time` datetime DEFAULT NULL COMMENT 'ä¸ä¸æ¬¡æ§è¡æ¶é´',
`next_execute_time` datetime DEFAULT NULL COMMENT 'ä¸ä¸æ¬¡æ§è¡æ¶é´',
`execute_count` int(8) DEFAULT NULL COMMENT '宿¶æ§è¡çå·²æ§è¡æ¬¡æ°',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT 'ä»»å¡è¡¨';
æ¥ç表
select database(); # æ¥çå½åæå¨çåº
show tables; # æ¥çæ°æ®åºä¸ææè¡¨
desc 表å; # æ¥çè¡¨ç»æ
show create table 表å; # æ¥ç表çå建ç»è
å建表
# å建æ°è¡¨
# create table æ°å»ºæ°æ®è¡¨åï¼
# åæ®µå ç±»å(é¿åº¦) [约æ(å
·ä½è§1)],
# åæ®µå ç±»å(é¿åº¦) [约æ(å
·ä½è§1)]
# );
create table class(
id INT AUTO_INCREMENT,
name varchar(32) UNIQUE,
age varchar(32) NOT NULL
);
# æ ¹æ®å·²æç表å建æ°è¡¨
create table æ°è¡¨ like æ§è¡¨ # ä½¿ç¨æ§è¡¨å建æ°è¡¨,åªå¤å¶è¡¨ç»æåå
¨é¨ç´¢å¼
create table æ°è¡¨ as select åæ®µ1 åæ®µ2... from definition only # asç¨æ¥å建ç¸åè¡¨ç»æå¹¶å¤å¶æºè¡¨æ°æ®
# å¯ä»¥æ·è´ä¸ä¸ªè¡¨ä¸å
¶ä¸çä¸äºå段:
CREATE TABLE newadmin AS
(
SELECT username, password FROM admin
)
# å¯ä»¥å°æ°å»ºç表çåæ®µæ¹å:
CREATE TABLE newadmin AS
(
SELECT id, username AS uname, password AS pass FROM admin
)
# å¯ä»¥æ·è´ä¸é¨åæ°æ®
CREATE TABLE anewadmin AS
(
SELECT id,`name` AS username FROM users WHERE id = 1
)
# å¯ä»¥å¨å建表çåæ¶å®ä¹è¡¨ä¸çåæ®µä¿¡æ¯:
CREATE TABLE newadmin
(
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY/id varchar(20)çç
)
AS
(
SELECT * FROM admin
)
å é¤è¡¨
# drop table æ°æ®åºè¡¨å
drop table Python
ä¿®æ¹è¡¨
alter table 表å add åæ®µå ç±»åï¼é¿åº¦ï¼ [约æ]; # æ·»å å
alter table 表å modify åæ®µå ç±»åï¼é¿åº¦ï¼ [约æ]; # ä¿®æ¹åçç±»åé¿åº¦å约æ
alter table 表å change æ§åæ®µå æ°å段å ç±»åï¼é¿åº¦ï¼ [约æ]; # ä¿®æ¹å表å
alter table 表å drop åæ®µå; # å é¤å
alter table 表å character set å符é; # ä¿®æ¹è¡¨çå符é
rename table 表å to æ°è¡¨å; # ä¿®æ¹è¡¨å
å¢å æ°æ®
insert into 表(åæ®µå1ï¼å段å2..) values(å¼1ï¼å¼2..); # åè¡¨ä¸æå
¥æäºå
insert into 表 values(å¼1ï¼å¼2ï¼å¼3..); # åè¡¨ä¸æå
¥ææå
# ON DUPLICATE KEY UPDATE ä¸åå¨åæå
¥ãåå¨åæ´æ°
# æ¤ä¸ºmysqlç¹æè¯æ³ã䏿¯æ åsqlè¯æ³ã
# mysqlè¯æ³æ¯æå¦ææ°æ®åå¨åæ´æ°ï¼ä¸åå¨åæå
¥ï¼é¦å
å¤ææ°æ®åå¨è¿æ¯ä¸åå¨çé£ä¸ªå段è¦è®¾ç½®æuniqueç´¢å¼ã
INSERT INTO 表å(å¯ä¸ç´¢å¼å, å2, å3) VALUE(å¼1, å¼2, å¼3) ON DUPLICATE KEY UPDATE å=å¼, å=å¼
# REPLACE INTO ä¸åå¨åæå
¥ãåå¨åå
å é¤åæå
¥
REPLACE INTO 表åç§°(å1, å2, å3) VALUES(å¼1, å¼2, å¼3)
ä¿®æ¹æ°æ®
update 表å set åæ®µå=å¼,åæ®µå=å¼...; # è¿ä¸ªä¼ä¿®æ¹ææçæ°æ®ï¼æä¸åçå¼é½åäº
update 表å set åæ®µå=å¼,åæ®µå=å¼... where æ¡ä»¶; # åªæ¹ç¬¦åwhereæ¡ä»¶çè¡
å 餿°æ®
# 1. deleteå¯ä»¥å é¤è¡æ°æ®ï¼ä¹å¯ä»¥å¯¹æ´è¡¨æ°æ®å é¤ï¼ä¸è¬ä¸whereå
³è使ç¨ãdeleteå é¤å
容ï¼éæ¾å
容空é´ï¼ä½æ¯è¡¨ç»æå表å®ä¹ä¸å é¤ãdeleteæ¯æ¬¡å é¤ä¸è¡æ¶ï¼é½ä¼å°è¯¥è¡çå 餿ä½ä½ä¸ºäºå¡è®°å½å¨æ¥å¿ä¸ã以便è¿è¡åæ»æä½ã
delete from 表å # å é¤è¡¨ä¸ææè®°å½
delete from 表å where æ¡ä»¶ # å é¤ç¬¦å whereæ¡ä»¶çæ°æ®
# 2. truncateåªæ¸
é¤è¡¨ä¸çå
容ï¼éæ¾å
容æå 空é´ï¼ä½æ¯è¡¨ç»æå表å®ä¹ä¸å é¤ãå
¶æ¬¡truncateä¸è½å é¤è¡æ°æ®ï¼æ¯deleteå é¤çå½»åºã
truncate table 表å;
# 3. dropå 餿°æ®åå®ä¹ï¼éæ¾ç©ºé´ï¼å®ä¼å°è¡¨çç»æä¹ä¸èµ·å 餿ã
drop table 表å
æ§è¡é度ï¼drop > truncate > deleteï¼å 为deleteæ¯æ§è¡ä¸æ¬¡ï¼é½è¦å¨äºå¡æ¥å¿ä¸è®°å½ä¸æ¬¡ãæä»¥ææ
¢
æ°æ®çç®åæ¥è¯¢
select * from 表å; # æ¥è¯¢ææå
select åæ®µå1,åæ®µå2,åæ®µå3.. from 表å; # æ¥è¯¢æå®å
åºæ¬çsqlè¯å¥
select * from 表å where èå´ # éæ©æ¥è¯¢
insert into 表å(field1,field2) values(value1,value2) # æå
¥
delete from 表å where èå´ # å é¤
update 表å set field1=value1 where èå´ # æ´æ°
select * from 表å where field1 like â%value1%â # æ¥æ¾
select * from 表å order by field1,field2 [desc] # æåº
select count as éè¦ç»è®¡æ»æ°çåæ®µå from 表å # æ»æ°
select sum(field1) as sumvalue from 表å # æ±å
select avg(field1) as avgvalue from 表å # å¹³å
select max(field1) as maxvalue from 表å # æå¤§
select min(field1) as minvalue from 表å # æå°
åå¨å¼æ
# æ¥çææçåå¨å¼æ
show engines;
# æ¥çä¸ååå¨å¼æåå¨è¡¨ç»ææä»¶ç¹ç¹
create table t1(id int)engine=innodb; # MySQLé»è®¤çåå¨å¼æ,æ¯æäºå¡,æ¯æè¡éï¼æ¯æå¤é®ãæä¸åªæä¸ä¸ªä¸»é®ï¼ç¨æ¥ç»ç»æ°æ®ç便®
create table t2(id int)engine=myisam; # 䏿¯æäºå¡ï¼ä¸æ¯æå¤é®ï¼æ¯æå
¨æç´¢å¼ï¼å¤çé度快ã
create table t3(id int)engine=blackhole; # 黿´ï¼åå
¥å®çä»»ä½å
容é½ä¼æ¶å¤±
create table t4(id int)engine=memory; # å°è¡¨ä¸çæ°æ®åå¨å¨å
åä¸ãè¡¨ç»æä»¥æä»¶åå¨äºç£çã
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
è®¾ç½®ä¸¥æ ¼æ¨¡å¼
# æ¥è¯¢
show variables like '%mode%';
# 设置
set session # 设置å½åçªå£ä¸ææ
set global # å
¨å±ææï¼ç»èº«åç¨
set global sql_mode = "STRICT_TRANS_TABLES";
# è®¾ç½®å®æåéè¦éåºå®¢æ·ç«¯ï¼éæ°ç»å½å®¢æ·ç«¯å³å¯ï¼ä¸éè¦é坿å¡ç«¯
group byåç»æ¶åå°ç模å¼ï¼
设置sql_mode为only_full_group_byï¼æå³ç以åä½å¡åç»ï¼åªè½åå°åç»ç便®ï¼
ä¸åºè¯¥å¨å»åç»éé¢çå个å
ç´ çå¼ï¼é£æ ·çè¯åç»å°±æ²¡ææä¹äºï¼å 为ä¸åç»å°±æ¯å¯¹å个å
ç´ ä¿¡æ¯çéæè·å
set global sql_mode="strict_trans_tables,only_full_group_by";
# 鿰龿¥å®¢æ·ç«¯
like çç¨æ³
A:% å
å«é¶ä¸ªæå¤ä¸ªå符çä»»æå符串ï¼
1ãlike'Mc%' å°æç´¢ä»¥åæ¯ Mc å¼å¤´çææå符串ï¼å¦ McBaddenï¼ã
2ãlike'%inger' å°æç´¢ä»¥åæ¯ inger ç»å°¾çææå符串ï¼å¦ RingerãStringerï¼ã
3ãlike'%en%' å°æç´¢å¨ä»»ä½ä½ç½®å
å«åæ¯ en çææå符串ï¼å¦ BennetãGreenãMcBaddenï¼ã
B:_ï¼ä¸åçº¿ï¼ ä»»ä½å个å符ï¼
like'_heryl' å°æç´¢ä»¥åæ¯ heryl ç»å°¾çææå
ä¸ªåæ¯çåç§°ï¼å¦ CherylãSherylï¼ã
Cï¼[ ] æå®èå´ ([a-f]) æéå ([abcdef]) ä¸çä»»ä½å个å符ï¼
1ï¼like'[CK]ars[eo]n' å°æç´¢ä¸åå符串ï¼CarsenãKarsenãCarson å Karsonï¼å¦ Carsonï¼ã
2ãlike'[M-Z]inger' å°æç´¢ä»¥å符串 inger ç»å°¾ãä»¥ä» M å° Z çä»»ä½åä¸ªåæ¯å¼å¤´çææåç§°ï¼å¦ Ringerï¼ã
Dï¼[^] ä¸å±äºæå®èå´ ([a-f]) æéå ([abcdef]) çä»»ä½å个å符ï¼
like'M[^c]%' å°æç´¢ä»¥åæ¯ M å¼å¤´ï¼å¹¶ä¸ç¬¬äºä¸ªåæ¯ä¸æ¯ c çææåç§°ï¼å¦MacFeatherï¼ã
Eï¼* å®åäºDOSå½ä»¤ä¸çéé
符ï¼ä»£è¡¨å¤ä¸ªå符ï¼
c*c代表cc,cBc,cbc,cabdfecçå¤ä¸ªå符ã
Fï¼ï¼åäºDOSå½ä»¤ä¸çï¼éé
符ï¼ä»£è¡¨å个å符 :
b?b代表brb,bFbç
Gï¼# 大è´åä¸ï¼ä¸åçæ¯ä»£åªè½ä»£è¡¨å个æ°åãk#k代表k1k,k8k,k0k ã
ä¸é¢æä»¬æ¥ä¸¾ä¾è¯´æä¸ä¸ï¼
ä¾1ï¼æ¥è¯¢nameåæ®µä¸å
嫿âæâåçã
select * from table1 where name like '%æ%'
ä¾2ï¼æ¥è¯¢nameåæ®µä¸ä»¥âæâåå¼å¤´ã
select * from table1 where name like 'æ%'
ä¾3ï¼æ¥è¯¢nameåæ®µä¸å«ææ°åçã
select * from table1 where name like '%[0-9]%'
ä¾4ï¼æ¥è¯¢nameåæ®µä¸å«æå°å忝çã
select * from table1 where name like '%[a-z]%'
ä¾5ï¼æ¥è¯¢nameåæ®µä¸ä¸å«ææ°åçã
select * from table1 where name like '%[!0-9]%'
æ¥è¯¢æä½
å¤é®è¡¨å建
ä¸å¯¹å¤ï¼Foreign Keyï¼
# foreign key(éè¦å
³èçæ¬åæ®µ) references éè¦å
³è对表ç表(éè¦å
³è对表çåæ®µ)
ä¾å¦ï¼
å建dep
foreign key(dep_id) references dep(id)
# åæ¥æ´æ°ï¼åæ¥å é¤
on update cascade # åæ¥æ´æ°
on delete cascade # 忥å é¤
å¤å¶è¡¨
# å¤å¶è¡¨
create table t1 select * from test;
# åªå¤å¶è¡¨ç»æ
create table t1 select * from test where 1=2;
å表æ¥è¯¢
where æ¥è¯¢
# between å¨...ä¹é´
select * from emp where id between 3 and 6;
ç¸å½äºï¼
select id,name from emp where id >= 3 and id <= 6;
# or æè
select * from emp where id >= 3 or id <= 6;
# inï¼åé¢å¯ä»¥è·å¤ä¸ªå¼
select * from 表å where åæ®µå in (æ¡ä»¶1,æ¡ä»¶2,æ¡ä»¶3);
# charââlength() åå符é¿åº¦
select * from 表å where char_length(éè¦è·åé¿åº¦çåæ®µå) = 4;
not é
å使ç¨
注æï¼å¤æç©ºä¸è½ç¨ = ï¼åªè½ç¨ is
# null 表示ä»ä¹ä¹ä¸æ¯ï¼ ä¸è½=ã>ã< ⦠ææç夿ï¼ç»æé½æ¯falseï¼ææåªè½ç¨ is nullè¿è¡å¤æã
# é»è®¤æ
åµä¸ï¼æ¨èä½¿ç¨ IS NOT NULLå»å¤æï¼å 为SQLé»è®¤æ
åµä¸å¯¹ï¼= Nullç夿伿°¸è¿è¿å0è¡ï¼ä½æ²¡æè¯æ³é误.å¦æä½ ä¸å®æ³è¦ä½¿ç¨ï¼= Nullæ¥å¤æï¼éè¦å ä¸è¿ä¸ªè¯å¥ï¼
set ANSI_NULLS off # è¿æ¶ä½ ä¼åç°IS NOT NULL å != null æ¯çæç
group by åç»
select æ¥è¯¢å段1,æ¥è¯¢å段2,... from 表å
where è¿æ»¤æ¡ä»¶
group byåç»ä¾æ® # åç»åååºçæ¯æ¯ä¸ªç»çç¬¬ä¸æ¡æ°æ®
èåæ¥è¯¢ ï¼ä»¥ç»ä¸ºåä½ç»è®¡ç»å æ°æ®>>>èåæ¥è¯¢(èéå°ä¸èµ·åæä¸ºä¸ä¸ªç»æ)
# max æå¤§å¼
# æ¯ä¸ªé¨é¨çæé«å·¥èµ
select post,max(salary) from emp group by post;
# min æå°å¼
# æ¯ä¸ªé¨é¨çæä½å·¥èµ
select post,min(salary) from emp group by post;
# avg å¹³åå¼
# æ¯ä¸ªé¨é¨çå¹³åå·¥èµ
select post,avg(salary) from emp group by post;
# æ¯ä¸ªé¨é¨çå·¥èµæ»å
# sum æ±å
select post,sum(salary) from emp group by post;
# æ±ç级ç·å¥³äººæ°ç»è®¡
select sum(case when sex ='ç·' then 1 else 0 end) ç·,sum(case when sex ='女' then 1 else 0 end) 女,count(*) æ»æ° from student
# countï¼éè¦è®¡æ°åæ®µï¼ è®¡æ°
# æ¯ä¸ªé¨é¨ç人æ°
select post,count(id) from emp group by post;
# concat() 彿°ç¨äºå°å¤ä¸ªåç¬¦ä¸²è¿æ¥æä¸ä¸ªå符串
CONCAT(str1,str2,â¦) # è¿åç»æä¸ºè¿æ¥åæ°äº§ççå符串ã妿任ä½ä¸ä¸ªåæ°ä¸ºNULL ï¼åè¿åå¼ä¸º NULLãå¯ä»¥æä¸ä¸ªæå¤ä¸ªåæ°
举ä¾ï¼
select concat("NAME: ",name) as å§å from emp;
# concat_ws: æå®æ¼æ¥åæ°ä¹é´çåé符
CONCAT_WS(separator,str1,str2,â¦) # CONCAT_WS() 代表 CONCAT With Separator ï¼æ¯CONCAT()çç¹æ®å½¢å¼ã第ä¸ä¸ªåæ°æ¯å
¶å®åæ°çåé符ãåé符çä½ç½®æ¾å¨è¦è¿æ¥ç两个å符串ä¹é´ãåé符å¯ä»¥æ¯ä¸ä¸ªå符串ï¼ä¹å¯ä»¥æ¯å
¶å®åæ°ã妿åé符为 NULLï¼åç»æä¸º NULLã彿°ä¼å¿½ç¥ä»»ä½åéç¬¦åæ°åç NULL å¼ã使¯CONCAT_WS()ä¸ä¼å¿½ç¥ä»»ä½ç©ºå符串ã (ç¶èä¼å¿½ç¥ææç NULLï¼ã
举ä¾ï¼
select concat_ws(':',name,age,sex) as info from emp;
# group_concat彿°è¿åä¸ä¸ªåç¬¦ä¸²ç»æï¼è¯¥ç»æç±åç»ä¸çå¼è¿æ¥ç»åèæã
举ä¾:
select post,group_concat(name) from emp group by post; # postï¼åç»å段ï¼name éè¦åç»åæ¾ç¤ºçåæ®µ
# group_concat宿´çè¯æ³å¦ä¸:
group_concat([DISTINCT] è¦è¿æ¥çåæ®µ [Order BY ASC/DESC æåºå段] [Separator 'åé符'])
# group_concat ççè§£
select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
# 以idåç»ï¼ænameåæ®µç弿å°å¨ä¸è¡ï¼éå·åé(é»è®¤)
select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
# 以idåç»ï¼ænameåæ®µç弿å°å¨ä¸è¡ï¼åå·åé
select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)
# 以idåç»ï¼ænameåæ®µç弿å°å¨ä¸è¡ï¼éå·åéï¼ä»¥nameæååº
select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
彿°
substring_index
# substring_index("å¾
æªåæç¨é¨åçå符串"ï¼"æªåæ°æ®ä¾æ®çå符"ï¼æªåå符çä½ç½®N)
# Nä¸ºæ£æ°ï¼ä»å·¦å¾å³æ°ï¼ç¬¬N个åé符ç左边ï¼åé¢ï¼çå
¨é¨å
容
SELECT SUBSTRING_INDEX('www.csdn.net','.',1)
ç»æä¸ºï¼www
# Nä¸ºè´æ°ï¼ä»å³å¾å·¦æ°ï¼ç¬¬N个åé符çå³è¾¹ï¼åé¢ï¼çå
¨é¨å
容
SELECT SUBSTRING_INDEX('www.csdn.net','.',-1)
ç»æä¸ºï¼net
# æå±ï¼éè¦è·åcsdnå符串
#å
ä»å·¦å¾å³å两个ï¼åä»å³å¾å·¦åä¸ä¸ª
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.csdn.net','.',2),'.',-1)
ä½¿ç¨æ¡ä¾è§ --> æ¥è¯¢ä¾å
having è¿æ»¤æ¥è¯¢
# havingçè¯æ³æ ¼å¼ä¸whereä¸è´ï¼åªä¸è¿havingæ¯å¨åç»ä¹åè¿è¡çè¿æ»¤ï¼å³whereè½ç¶ä¸è½ç¨èå彿°ï¼ä½æ¯havingå¯ä»¥ï¼
# ç¨æ³
select æ¥è¯¢å段1,æ¥è¯¢å段2,... from 表å
where è¿æ»¤æ¡ä»¶1
group byåç»ä¾æ®
having avg(è¿æ»¤æ¡ä»¶2) > 10000;
distinct å»é
# 对æéå¤çå±ç¤ºæ°æ®è¿è¡å»éæä½
select distinct éåéåæ®µ from 表å;
order by æåº
select * from emp order by salary asc; # é»è®¤ååº
select * from emp order by salary desc; # éåº
# 夿¡ä»¶æåº
# å
æç
§ageéåºï¼å¨å¹´é¾ç¸åçæ
åµä¸åæç
§èªèµååº
select * from emp order by age desc,salary asc;
# ææå®å
容æåº
SELECT xxi.CALLPER, xxi.QXMC, COUNT(1) AS CS, exi.EVENT_TYPE
FROM XFR_XFJ_INFO xxi
LEFT JOIN EVENT_XFJ_INFO exi ON xxi.EVENT_ID = exi.EVENT_ID
WHERE exi.EVENT_CLASS = 'å
¶ä»'
GROUP BY xxi.CALLPER
ORDER BY CASE
WHEN exi.EVENT_TYPE LIKE '%è¶çº§%' THEN 3
WHEN exi.EVENT_TYPE LIKE '%éå¤%' THEN 2
WHEN exi.EVENT_TYPE LIKE '%群ä½%' THEN 1
WHEN exi.EVENT_TYPE LIKE '%ææäºä»¶%' THEN 0
END DESC
LIMIT 5
limit éå¶å±ç¤ºæ¡æ°
# éå¶å±ç¤ºæ¡æ°
select * from emp limit 3;
# æ¥è¯¢å·¥èµæé«ç人ç详ç»ä¿¡æ¯
select * from emp order by salary desc limit 1;
# å页æ¾ç¤º
select * from emp limit 0,5; # 第ä¸ä¸ªåæ°è¡¨ç¤ºèµ·å§ä½ç½®ï¼ç¬¬äºä¸ªåæ°è¡¨ç¤ºçæ¯æ¡æ°ï¼ä¸æ¯ç´¢å¼ä½ç½®
select * from emp limit 5,5;
# å¦æç¡®å®æ¥è¯¢ç»æåªæä¸æ¡æ¶ï¼å ä¸limti 1 å¯ä»¥æé«æ¥è¯¢é度ã
æ£å
select * from emp where name regexp '^j.*(n|y)$';
replace æ¿æ¢
replace(str1,old,new) # str1ï¼éè¦æ¿æ¢çåæ®µå
update gd_km set mc=replaceï¼mc,'åå°','æ¿å'ï¼
说æï¼newæ¿æ¢str1ä¸åºç°çææoldï¼è¿åæ°çå符串ï¼å¦æææä¸ªåæ°ä¸ºNULLï¼æ¤å½æ°è¿åNULL
è¯¥å½æ°å¯ä»¥å¤æ¬¡æ¿æ¢ï¼åªè¦str1ä¸è¿æoldåå¨ï¼æåé½è¢«æ¿æ¢ænew
è¥new为空ï¼åå é¤old
å¤è¡¨æ¥è¯¢
å è¿æ¥ãå·¦è¿æ¥ãå³è¿æ¥ãå ¨è¿æ¥
# å
è¿æ¥ï¼åªåä¸¤å¼ è¡¨æå¯¹åºå
³ç³»çè®°å½ï¼åªæ¼ä¸¤ä¸ªè¡¨å
±æçï¼
左表 inner join å³è¡¨ on æ¡ä»¶
select * from emp inner join dep on emp.dep_id = dep.id
where dep.name = "ææ¯";
# å·¦è¿æ¥ï¼å¨å
è¿æ¥çåºç¡ä¸ï¼ä¿çå·¦è¾¹çæ°æ®ï¼å³è¾¹æ²¡æå°±ä¸ºç©º
左表 inner left å³è¡¨ on æ¡ä»¶
# å³è¿æ¥ï¼å¨å
è¿æ¥çåºç¡ä¸ï¼ä¿çå³è¾¹çæ°æ®ï¼å·¦è¾¹æ²¡æå°±ä¸ºç©º
左表 inner right å³è¡¨ on æ¡ä»¶
# å
¨è¿æ¥ï¼å·¦å³è¿æ¥é½æï¼ç¨unionè¿æ¥
左表 inner left å³è¡¨ on æ¡ä»¶ union 左表 inner right å³è¡¨ on æ¡ä»¶
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.id;
åæ¥è¯¢
# å°±æ¯å°ä¸ä¸ªæ¥è¯¢è¯å¥çç»æç¨æ¬å·æ¬èµ·æ¥å½ä½å¦å¤ä¸ä¸ªæ¥è¯¢è¯å¥çæ¡ä»¶å»ç¨
select name from where id in(select dep_id from emp where age>25);
mysqlæ¥è¯¢ä¸å¼ 表ææçåæ®µåç§°
select COLUMN_NAME, column_comment from INFORMATION_SCHEMA.Columns where table_name='ä½ ç表åâ
æ¥æ
æ¶é´æ ¼å¼å
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
å¸¸ç¨æ¹æ³
è·åå½åæ¶é´
SELECT CURDATE() -- 2020-09-27
CURRENT_TIME() -- 00:00:00
SELECT NOW() -- 2020-09-27 00:00:00
è·å彿¶æ¶é´æ³ï¼10ä½ï¼
SELECT UNIX_TIMESTAMP() -- 1601190811
æ ¼å¼åæ¶é´æ³
SELECT FROM_UNIXTIME(unix_timestamp(),'%Y-%m-%d %H:%i:%s')
å¤ç13ä½çæ¶é´æ³
SELECT FROM_UNIXTIME(16011908110000/1000,'%Y-%m-%d %H:%i:%s')
PS:
-
10使¶é´æ³å13使¶é´æ³çåºå«ï¼
javaçdateé»è®¤ç²¾åº¦æ¯æ¯«ç§ï¼ä¹å°±æ¯è¯´çæçæ¶é´æ³å°±æ¯13ä½çï¼èåc++æè phpå ä¸ºå ¶ç²¾åº¦æ¯ç§ï¼æä»¥çæçæ¶é´æ³é»è®¤å°±æ¯10ä½çã
-
å¦ä½ç¸äºè½¬æ¢
å°13使¶é´æ³é¤ä»¥1000åæ´ï¼å°10使¶é´æ³*1000L
è¿åä¸¤ä¸ªæ¥æç¸åï¼expr1 â expr2 ï¼ç¸å·®ç天æ°
DATEDIFF(expr1, expr2)
SELECT DATEDIFF('2001-01-01','2001-02-02') -- 32
SELECT DATEDIFF('2019-01-14 14:32:59','2019-01-02') -- 12
è¿åä¸¤ä¸ªæ¥æç¸åï¼expr1 â expr2 ï¼ç¸å·®çæ¶é´æ°
TIMEDIFF(expr1, expr2) # ä¸¤ä¸ªåæ°ç±»åå¿
é¡»ç¸å
SELECT TIMEDIFF('18:32:59','60000') -- 12:32:59
SELECT TIMEDIFF('18:32:59','2019-1-1 60000') -- NULL
æ¥ææ¶é´è¿ç®å½æ°
# åå«ä¸ºç»å®çæ¥ædateå ä¸(add)æåå»(sub)ä¸ä¸ªæ¶é´é´éå¼expr
ã# æ ¼å¼:
ãDATE_ADD(date, INTERVAL expr unit);
ãDATE_SUB(date, INTERVAL expr unit);
ã
ãintervalæ¯é´éç±»åå
³é®å
expræ¯ä¸ä¸ªè¡¨è¾¾å¼ï¼å¯¹åºåé¢çç±»å
unitæ¯æ¶é´é´éçåä½(é´éç±»å)ï¼20个ï¼
interval | å«ä¹ |
---|---|
HOUR | å°æ¶ |
MINUTE | å |
SECOND | ç§ |
MICROSECOND | æ¯«ç§ |
YEAR | å¹´ |
MONTH | æ |
DAY | æ¥ |
WEEK | å¨ |
QUARTER | å£ |
YEAR_MONTH | å¹´åæ |
DAY_HOUR | æ¥åå°æ¶ |
DAY_MINUTE | æ¥ååé |
DAY_ SECOND | æ¥åç§ |
HOUR_MINUTE | å°æ¶åå |
HOUR_SECOND | å°æ¶åç§ |
MINUTE_SECOND | åéåç§ |
# å ä¸å¤©
select now(),date_add(now(),interval 1 day);ãã
+---------------------+--------------------------------+
| now() | date_add(now(),interval 1 day) |
+---------------------+--------------------------------+
| 2020-01-01 00:59:59 | 2020-01-02 00:59:59 |
+---------------------+--------------------------------+
# å1天1å°æ¶1å1ç§
SELECT date_sub('2020-01-03 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND) -- 2020-01-01 22:58:59
éåæ¥ææ¶é´çå个é¨å(常ç¨)
SELECT now(),date(now()); -- æ¥æ
SELECT now(),time(now()); -- æ¶é´
SELECT now(),year(now()); -- å¹´
SELECT now(),quarter(now()); -- å£åº¦
SELECT now(),month(now()); -- æ
SELECT now(),week(now()); -- å¨
SELECT now(),day(now()); -- æ¥
SELECT now(),hour(now()); -- å°æ¶
SELECT now(),minute(now()); -- åé
SELECT now(),second(now()); -- ç§
SELECT now(),microsecond(now()); -- å¾®ç§
æ¥æä½ç½®è®¡ç®
# DAYOFWEEK彿°è¿åæ¥æç工使¥ç´¢å¼å¼ï¼å³æææ¥ä¸º1ï¼ææä¸ä¸º2ï¼ææå
为7ã è¿äºç´¢å¼å¼å¯¹åºäºODBCæ åã
# è¿åæ¥ædå¨ä¸å¨ã䏿ãä¸å¹´ä¸æ¯ç¬¬å 天
dayofweek(d)
dayofmonth(d)
dayofyear(d)
# è®¡ç®æ¥æ d æ¯æ¬å¹´ç第å 个ææï¼èå´æ¯ 0 å° 53
WEEK(d)
SELECT WEEK('2011-11-11 11:11:11') -- 45
# è®¡ç®æ¥æ d è·ç¦» 0000 å¹´ 1 æ 1 æ¥ç天æ°
TO_DAYS(d)
SELECT TO_DAYS('0001-01-01 01:01:01') -- 366
# æ¥æ d æ¯ææå ï¼0 表示ææä¸ï¼1 表示ææäº
WEEKDAY(d)
SELECT WEEKDAY("2017-06-15") -- 3
# è®¡ç®æ¥æ d æ¯æ¬å¹´ç第å 个ææï¼èå´æ¯ 0 å° 53
WEEKOFYEAR(d)
SELECT WEEKOFYEAR('2011-11-11 11:11:11') -- 45
æ¥è¯¢ä¾å
# æ¥è¯¢è¿ä¸å¤©ï¼
select * from table where to_days(column_time) = to_days(now());
select * from table where date(column_time) = curdate();
# æ¥è¯¢è¿ä¸å¨ï¼
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
# æ¥è¯¢è¿ä¸ä¸ªæï¼
select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);
mybatis xml æ¥è¯¢æ¶é´èå´
<if test="eventCondition.times != null">
<foreach collection="eventCondition.times" index="index" item="item">
<if test="index == 0 and item != ''">
AND DATE_FORMAT( XFRQ ,'%Y-%m-%d') >= DATE_FORMAT( #{item},'%Y-%m-%d')
</if>
<if test="index == 1 and item != ''">
AND DATE_FORMAT( XFRQ ,'%Y-%m-%d') <= DATE_FORMAT( #{item},'%Y-%m-%d')
</if>
</foreach>
</if>
æ¥ååæ¥çµæ¯ä¾
SELECT EVENT_NAME, LDCS
, CONCAT(ROUND(LDCS / (
SELECT SUM(LDCS)
FROM EVENT_12345_INFO
) * 100.00, 2), '%') AS proportion
FROM EVENT_12345_INFO
ORDER BY LDCS DESC
LIMIT 10
æ¥è¯¢æ¯å¤©çå¹³ååçæ¶é´åæå¤§åçæè±æ¶é´
SELECT DATE_FORMAT(xi.BJSJ, '%Y-%m-%d') AS BJSJ
, ROUND(AVG(TIMESTAMPDIFF(SECOND, xi.DJSJ, xi.BJSJ) / 3600), 2) AS avgHours
, MAX(TIMESTAMPDIFF(HOUR, xi.DJSJ, xi.BJSJ)) AS maxHours
, COUNT(1) AS once
FROM EVENT_XFJ_INFO exi
LEFT JOIN XFJ_INFO xi ON exi.EVENT_ID = xi.EVENT_ID
WHERE exi.EVENT_CLASS = 'å
¶ä»'
AND xi.BJBZ = 1
GROUP BY DATE_FORMAT(xi.BJSJ, '%Y-%m-%d')
ORDER BY DATE_FORMAT(xi.BJSJ, '%Y-%m-%d') DESC
å±ç¤ºèåºçèæå䏿¬¡è®°å½ä»·æ ¼ä¸å䏿¬¡è®°å½ä»·æ ¼çå¯¹æ¯æ åµ
SELECT
a.id,
a.food_name AS foodName,
a.food_pic AS foodPic,
a.price,
b.price AS originalPrice,
(
SELECT
`name`
FROM
tb_market
WHERE
market_id = a.market_id
) marketName,
CASE
WHEN a.price - IF(b.price IS NULL,0,b.price) > 0 THEN
'䏿¶¨'
WHEN a.price - b.price = 0 THEN
'æå¹³'
WHEN a.price - b.price < 0 THEN
'ä¸é'
END AS trend
FROM(
SELECT * FROM tb_market_price WHERE id in(
select
substring_index(substring_index(group_concat(tmp.id order by tmp.id desc ),',',2),',',1) AS 'ææ°èåid'
from `tb_market_price` tmp
group by tmp.food_name,tmp.market_id
)
) a INNER JOIN (
SELECT * FROM tb_market_price WHERE id in(
select
substring_index(substring_index(group_concat(tmp.id order by tmp.id desc ),',',2),',',-1) AS 'ææ°èåå䏿¬¡id'
from `tb_market_price` tmp
group by tmp.food_name,tmp.market_id
)
) b ON a.food_name = b.food_name AND a.market_id = b.market_id