mysq 學習四 多表查詢

多表的查詢

1、連接查詢

a、交叉連接:(cross in) 

create table CUSTOMERS(

id int(11) NOT null auto_increment,

name varchar(100) default null,

city varchar(20) default null,

primary key (id)

);

在插入數據的時候如果出現了中文插不進去的時候,保錯的提示信息

是varchar的長度不夠的時候,但是我們又明顯知道我們指定的

長度是夠的時候

我們可以看看我們的編碼格式

show variables like"character%";

然後設置我們的編碼格式

通常設置

set character_set_client=gbk;

set character_set_results=gbk;

原因是我們的dos命名行下的編碼格式是gbk;

insert into CUSTOMERS values(1,"張三","四川");

insert into CUSTOMERS values(2,"李四","重慶");

insert into CUSTOMERS values(3,"王五","廣州");

insert into CUSTOMERS values(4,"孫六","湖北");

insert into CUSTOMERS values(5,"周七","上海");

然後創建orders表格

create table orders(

ID  int(11) NOT NULL auto_increment,

order_number varchar(100) default NULL,

price float(8,2) default null,

customer_id int(11) default null,

primary key (ID),

key customer_id_fk (customer_id),

constraint customer_id_fk foreign key (customer_id) references CUSTOMERS(ID)

);

INSERT INTO `orders` VALUES (1,'0001',100.00,1),(2,'0002',200.00,1),(3,'0003',300.00,1),(4,'0004',100.00,2),(5,'0005',200.00,3),(6,'0006',100.00,4),(7,'0007',1000.00,NULL);

select * from customers,orders;

select c.ID,c.NAME,o.ORDER_NUMBER,o.PRICE from CUSTOMERS c,ORDERS o;

    查詢結果如下:

wKiom1gbQmayDmNaAABEXv6JpEg935.png-wh_50

    共有35條記錄。

b、內連接(inner join)

隱式內連接:

select * from CUSTOMERS c,ORDERS o where c.ID= o.CUSTOMER_ID;

顯示內連接:(關鍵字inner join)

select * from CUSTOMERS c inner join ORDERS o on c.ID=o.CUSTOMER_id;

其中的關鍵字inner 可以省略,省略後如下:

select * from CUSTOMERS c  join ORDERS o on c.ID=o.CUSTOMER_id;

    查詢結果如下:

    wKiom1gbQp_iDZMHAAAlt6hPtUE354.png-wh_50

c、外連接(outer join)

查看所有客戶信息,同時有訂單的顯示訂單的詳細信息

左外連接:返回滿足連接條件的記錄,同時返回左表中剩餘的其他記錄。

select * from CUSTOMERS c left outer join ORDERS o on c.ID=o.CUSTOMER_ID;

    查詢結果如下:

    wKiom1gbQsCCiI6hAAApe4-hnU8531.png-wh_50

查看所有訂單信息,同時返回下單的客戶信息

右外:返回滿足連接條件的記錄,同時返回右表中剩餘的其他記錄。

select * from CUSTOMERS c right outer join ORDERS o on c.ID = o.CUSTOMER_ID;

2、子查詢

又稱之爲嵌套查詢。查詢中有查詢。

執行順序:先執行子查詢(內查詢),再執行外查詢。

子查詢:必須放在小括號之內。

查詢“張三”的所有訂單信息

形式一:多條查詢語句

select ID from CUSTOMERS where NAME='張三';

select * from ORDERS where CUSTOMER_ID=1;

形式:subselect(子查詢)

select * from ORDERS where CUSTOMER_ID=(select ID from CUSTOMERS where NAME='張三');

查詢訂單單價大於100的有哪些客戶?

select * from CUSTOMERS where ID in (select CUSTOMER_ID from ORDERS where PRICE > 100);

3、MySql常用的函數

SUM():求和

COUNT():計數

AVG():求平均

MAX():求最大

MIN():求最小

統計有多少個客戶

select  count(*) from CUSTOMERS;

統計訂單值大於300的訂單

select count(*) from ORDERS where PRICE>=300;

4、分組(報表)查詢:group by

對訂單表中商品歸類後,顯示沒一類商品的總價

對訂單表中商品歸類後,顯示每一類商品的總價

select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT;

查詢購買了幾類商品,並且每類總價大於100的商品

select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT having sum(PRICE)>100;

5、數據庫的備份和恢復

(1)、備份數據(表結構和數據)

c:\MySQL\bin\mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql

所以我在cmd下面執行:mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql就可以完成備份

(2)、恢復數據庫中的數據

方式一:

由於剛纔我已經刪除了數據庫

應該先創建數據庫

create database test5; 

然後:use test5;

最後:source d:test5.sql;

這樣就可以完成數據庫的恢復

方式二:

c:MySQL\bin\mysql -u root -p test6<d:/test5.sql

執行:mysql -u root -p test5<d:/test5.sql(注意沒有“;”)

當然再執行之前也應該保證test5的數據庫數存在的。

(3)、刪除數據庫

drop database test5;

(4)、查詢tables

show tables;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章