insert添加數據
前面我們學習了數據庫,數據庫表,接下來我們學習一下操作表中的數據。
讓我們開始利用 insert 語句來增加記錄,這是一個 SQL 語句,需要為它指定希望插入數據行的表或將值按行放入的表。如果你設置了主鍵並且自動增長,添加的時候需要把對應的主鍵值設置為null或者數字“0”。
基本語法:
insert [into] tbl_name [(col_name,...)] VALUES (pression,...)
insert [into] tbl_name SET col_name=expression
“into”一詞自 MySQL 3.22.5 以來是可選的。(這一點對其他形式的insert 語句也成立。)values表必須包含表中每列的值,並且按表中列的存放次序給出。(一般, 這就是創建表時列的定義次序。如果不能肯定的話,可使用describe tbl_name來查看這個次序。)。 看一下實例:
可指定所有列的值:
insert test01_01 values(null,'www.111cn.net','23','beij');
使用多個值表,可以一次提供多行數據:
insert test01_01 values('www.111cn.net','23','beij'),('grey','34','ah');
可以給出要賦值的那個列,然後再列出值。這對於希望建立只有幾個列需要初始設置 的記錄是很有用的:
insert test01_01(name) values('gery');
insert test01_01(name) values('mack'),('rose');
insert test01_01 set name='sara';//使用這種形式的 insert 語句不能插入多行
insert...select添加數據
當我們在上一節學習創建表時,知道可以使用select從其它表來直接創建表,甚至可以同時復制數據記錄。如果你已經擁有了一個表,你同樣可以從select語句的配合中獲益。
基本語法:
insert into tb_name select * from tb_name1;//表結構完全一致
insert into tb_name(col1) select col1 from tb_name1;//取某個值添加
insert into ... select語句滿足下列條件:
1:查詢不能包含一個order by子句
2:insert語句的目的表不能出現在select查詢部分的from子句,因為這在ANSI SQL中被禁止讓從你正在插入的表中select.問題是select將可能發 現在同一個運行期間內先前被插入的記錄。當使用子選擇子句時,情況能很容易混淆
看下面實例:
insert into test01_03 select * from test01_01;
insert into test01_03(name) select name from test01_01;
select查詢
除非最終檢索它們並利用它們來做點事情,否則將記錄放入數據庫沒什麼好處。這就 是select語句的用途,即幫助取出數據。select大概是SQL語言中最常用的語句,而且怎樣使用它也最為講究;用它來選擇記錄可能相當復雜,可能會涉及許多表中列之間 的比較。本節介紹select語句關於查詢的最基本功能。 select語句的語法如下:
select selection_list //選擇哪些列
from table_list //從何處選擇行
where primary_constraint //行必須滿足什麼條件
group by grouping_columns // 怎樣對結果分組
having secondary_constraint //行必須滿足的第二條件
order by sorting_columns //怎樣對結果排序
limit count //結果限定
注意:所有使用的關鍵詞必須精確地以上面的順序給出。例如,一個having子句必 須跟在group by子句之後和order by子句之前
上述語法中除了select關鍵字之外,其他每樣東西都是可選的。有些數據庫需要用from關鍵字,但是MySQL允許對表達式求值而不引用任何表
普通查詢
select最簡單的形式是從一張表中檢索每樣東西
基本語法:
select columns from tb_name;
columns是列名稱,可以寫成*號,表示查詢所有列;也可以指定某個列。tb_name是你的目標數據庫表。
看兩個例子:
select * from test01_01;//查詢當前表裡所有的列的數據
select name,age from test01_01;//查詢當前表裡name列和age列的所有數據
select (2+3*4.5)/2.5;//表達式求值而不引用任何表
條件查詢
不必每次查詢都返回所有的行記錄,你能從你的表中只選擇特定的行。你可以使用where或者having,這裡我們只講where語句,因為where能實現having絕大部分功能
基本語法:
select columns from tb_name where expression..;
expression的表現形式很多,例如name='www.111cn.net',age>=20,name='www.111cn.net' or name ='www.111cn.net'等等,都可以寫在where表達式後面。
看一個例子:
select * from test01_01 where name ="www.111cn.net";//篩選出當前表中name的值是www.111cn.net的所有數據。
查詢排序
使用order by子句對查詢返回的結果按一列或多列排序。order by子句的語法 格式為:
order by column_name [asc|desc] [,…]
其中asc表示升序,為默認值,desc為降序。order by不能按text、text和image數據類型進行排序。另外,可以根據表達式進行排序
看下面實例:
select * from test01_01 order by age asc;//按照年齡升序輸出
注意desc/asc關鍵詞僅適用於緊跟在它之前的列名字
分組和行計數
group by從句根據所給的列名返回分組的查詢結果,可用於查詢具有相同值的列
基本語法:
group by col_name,….
單獨使用group by沒有任何意義,它的真正作用在於與各種組合函數配合,用於行計數
看下面實例:
select name,count(*) from test01_01 group by name;//按name分組,並且統計數量
如果你除了計數還返回一個列的值,那麼必須使用group by語句,否則無法計算記錄,產生錯誤。
多表查詢
查詢多個表,from子句列出表名,並用逗號分隔,因為查詢需要從他們兩個拉出信息
基本語法:
select t1.name,t2.name from tb_name1 as t1,tb_name2 as t2 where t1.name=t2.name;
上述代碼表示,從t1和t2中取出兩張表name相同的值。as表示為這個表取別名。
實例如下:
select t1.name as t1name,t1.age as t1age,t2.name as t2name,t2.age as t2age
from test01_01 as t1,test01_03 as t2 where t1.name=t2.name;
update更新數據
修改數據我們用update更新,這是最常用的更新數據語句,我們看下語法
update tbl_name SET 要更改的列
where 要更新的記錄
這裡的 where 子句是可選的,因此如果不指定的話,表中的每個記錄都被更新。
實例如下:
update test01_03 set name='www.111cn.net' where age= '20';
delete刪除數據
刪除一條語句,我們常用delete關鍵字。語法定義:
delete from tbl_name where 要刪除的記錄
where子句指定哪些記錄應該刪除。它是可選的,但是如果不選的話,將會刪除所有的記錄。這意味著最簡單的delete語句也是最危險的
實例如下:
delete from test01_01 where age=10;//刪除年齡為10的數據