MySQL的SQL種類

SQL種類主要分爲:mysql

  • DDL:數據庫(對象)定義語言 。 (Data Definition Languag)
  • DCL:數據庫控制語言(grant revoke)(Data Control Language)
  • DML:數據(行)操做語言(update delete insert)(Data Manipulation Language)
  • DQL: 數據查詢語言(show、select) (Data Query Language)

 

DDL操做

對象:包括庫和表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;

 

DML語句:數據操做語言

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;  在物理上刪除表數據,速度比較快,注意這裏的刪除爲清空表中數據。刪除以後沒法經過二進制日誌追回。

  

DQL: 數據查詢語言

select基本查詢

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排序

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';
相關文章
相關標籤/搜索