SQL種類主要分爲:mysql
對象:包括庫和表sql
庫數據庫
定義什麼? 一、庫名字 二、庫的基本屬性 如何定義? create database lufei; 建立數據庫lufei create schema lf; 建立數據庫lf,和上面的命令執行結果同樣 show databases; create database llf CHARACTER SET utf8 ; show create database llf; # 查看建立數據庫的語句 drop database llf; help create database; # 查看幫助文檔 字符集: CHARACTER SET [=] charset_name 排序規則:COLLATE [=] collation_name 改庫的字符集: ALTER DATABASE [db_name] CHARACTER SET charset_name COLLATE collation_name mysql> alter database lf charset utf8mb4; mysql> show create database lf;
表函數
表數據:數據行 表屬性(元數據):表名、列名字、列定義(數據類型、約束、特殊列屬性)、表的索引信息 定義什麼? 定義表的屬性。 use lufei; 建立: create table t1 (id int ,name varchar(20)); 查詢: show tables; show create table t1; desc 刪除 drop table t1; truncate table t1; 在物理上刪除表數據,速度比較快,注意這裏的刪除爲清空表中數據。刪除以後沒法經過二進制日誌追回。 修改: (1)在表中添加一列 alter table t1 add age int; (2)添加多列 alter table t1 add bridate datetime, add gender enum('M','F'); (3)在指定列後添加一列 alter table t1 add stu_id int after id; (4)在表中最前添加一列 alter table t1 add sid int first; (5)刪除列 alter table t1 drop sid; (6)修改列名 alter table t1 change name stu_name varchar(20); (7)修改列屬性 alter table t1 modify stu_id varchar(20); (8)修改表名 rename table t1 to student; alter table student rename to stu;
insert use lufei create table t1 (id int ,name varchar(20)); insert into t1 values(1,'zhang3'); select * from t1; insert into t1 values (2,'li4'),(3,'wang5'),(4,'ma6'); insert into t1(name) values ('xyz'); update update t1 set name='zhang33' ; ----會更新表中全部行的name字段,比較危險。 update t1 set name='zhang55' where id=1; ----update在使用時通常都會有where條件去限制。 delete delete from t1 ; --刪除表中全部行,比較危險。一行一行刪除表中數據,屬於邏輯層面的刪除。刪除以後能夠經過二進制日誌追回。 delete from t1 where id=2; DDL操做 truncate table t1; 在物理上刪除表數據,速度比較快,注意這裏的刪除爲清空表中數據。刪除以後沒法經過二進制日誌追回。
select語句: SELECT USER,PASSWORD ,HOST FROM mysql.user; -- select 基本查詢 DESC world.city SELECT id ,NAME FROM world.city; SELECT * FROM world.`city`; -- select 條件查詢 where 一、查詢中國(CHN)全部的城市信息 SELECT * FROM world.`city` WHERE countrycode='CHN'; 二、查詢中國(CHN)安徽省全部的城市信息。 SELECT * FROM world.`city` WHERE countrycode='CHN' AND district='anhui'; 三、查詢世界上人口數量在10w-20w城市信息 SELECT * FROM world.`city` WHERE population BETWEEN 100000 AND 200000 ; 四、中國或者日本的全部城市信息 where字句中的IN SELECT * FROM world.city WHERE countrycode IN ('CHN','JPN'); 五、模糊查詢 SELECT * FROM world.city WHERE countrycode LIKE 'ch%';
select 排序並限制 ---- 按照人口數量排序輸出中國的城市信息(ASC\DESC) SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY population ASC; SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY population DESC; ---- 按照多列排序人口+省排序(最好是用單個列排序,若是是多個列可能會出現想象不到的結果) SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY `Population`,`District` ASC --- 按照列的位置排序(按照第5列排序,這裏的第五列爲Population) SELECT * FROM city ORDER BY 5 DESC ;
limit子句性能
limit語句的使用(通常建議配合排序使用) SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY 5 DESC LIMIT 20; -- 11-20 跳過10行,而後再顯示10行,因此顯示的是11-20行的信息 SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY 5 DESC LIMIT 10,10 ; --11-20 limit 10顯示10行, OFFSET跳過10行。因此顯示的是11-20行,跟上面一條SQL執行結果同樣。 SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY 5 DESC LIMIT 10 OFFSET 10 ; 注意:在MySQL中,把NULL值看成一列值中最小值對待。所以,生序排序時,它出如今最前面。
DESC city DESC countrylanguage 傳統的鏈接寫法(使用where) ---- 中國全部城市信息+使用語言 SELECT NAME ,countrycode ,population FROM city WHERE countrycode ='CHN' SELECT countrycode ,LANGUAGE FROM countrylanguage; SELECT ci.NAME ,ci.countrycode ,ci.population,cl.language FROM city AS ci , countrylanguage AS cl WHERE ci.countrycode ='CHN' AND ci.CountryCode=cl.CountryCode; SELECT NAME,ci.countrycode ,cl.language ,ci.population FROM city ci , countrylanguage cl WHERE ci.countrycode='chn' AND ci.`CountryCode`=cl.countrycode; # NATURAL JOIN 使用的很少 SELECT NAME,countrycode ,LANGUAGE ,population FROM city NATURAL JOIN countrylanguage WHERE population > 10000000 ORDER BY population; SELECT NAME,countrycode ,LANGUAGE ,population FROM city JOIN countrylanguage USING(countrycode); ---- 查詢青島這個城市,所在的國傢俱體叫什麼名字 DESC city DESC country SELECT NAME,countrycode FROM city WHERE NAME='qingdao'; SELECT NAME FROM country WHERE CODE='CHN'; # join on 使用比較多 SELECT ci.name ,ci.countrycode,ci.population ,co.name FROM city AS ci JOIN country AS co ON ci.countrycode=co.code AND ci.name='qingdao';
# 聚合查詢 group by +聚合函數(avg()、max()、min()、sum()) # 查詢中國對應城市的總人口數 SELECT countrycode ,SUM(population) FROM city WHERE countrycode = 'chn' GROUP BY countrycode; union(通常用來替換像 or 、in(),union的性能要優於它們) SELECT * FROM world.city WHERE countrycode IN ('CHN','JPN'); 改寫爲: SELECT * FROM world.city WHERE countrycode ='CHN' union SELECT * FROM world.city WHERE countrycode ='JPN';