[MySQL]MySQL的常用SQL語法

1.SQL語句:
 a.數據庫的操作:  操作對象的屬性需要標識:database;table...
   * create database 庫名(純小寫);//在Mysql中新建一個數據倉庫
   * show databases;//顯示Mysql中所有數據庫
   * drop database 庫名;//直接刪除掉該數據庫
   * use 庫名;//在新建表之前一定要選擇操作哪個數據庫
 
 b.數據表的創建:(create)
   * use 庫名;//在新建表之前一定要選擇操作哪個數據庫   
   * create table 表名(
      列名1(英文) 列的類型  約束,//字符串的類型不是String 是varchar(30)
      列名2(英文) 列的類型  約束,
     );
   * show tables;//看的是當前數據庫的所有表    
   * drop table 表名;//刪除表的結構
 
 c.主鍵與外鍵與自動增長
   主鍵:唯一,作爲列的主鍵該列的數據不能重複
   自動增長:作爲自動增長的列,不用我們手動插入數據,由數據庫來維護
   外鍵:
     Test1表  A列 B列
     Test2表  B列 C列//在B列中加一個外鍵約束引用Test1表B列
     Test2表中B列的取值必須是Test1表中B列中的數據
 
 4.向表中插入數據(insert into...values...)
* INSERT INTO gjp_sort (sid,sname,parent,sdesc) VALUES //既寫列名也寫該列對應的值
 (1,'工資收入','收入','我就喜歡發工資')


-- 寫入數據的方式,是推薦
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //如果有自動增長列,可以不用手動插入值
 ('基金收入','收入','我買了點基金')


* INSERT INTO gjp_sort VALUES  //一個列名都不寫,值默認從表左側開始,都要插入
 (3,'旅遊支出','支出','黃金週旅遊')


* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //可以批量插入值
 ('基金收入','收入','我買了點基金'),
 ('喫飯支出','支出','下館子')

 5.修改表結構(Alter)(瞭解,一般不建議在建好表上修改表結構)


 6.修改表中的數據(Update...set...)
   * update 表名 set 字段1=字段值,字段2=字段值 [where 修改條件]//[]代表可選
 
 7.刪除表中的數據(delete from):
   drop是刪除結構(數據庫結構和表結構,結構刪完,數據也沒了)
   delete是刪除數據
   * delete from 表名 [where 刪除條件]


 8.查詢表中的數據庫(select...from...)
   select *  from 表名//查詢該表中所有列的數據
   select 列名1,列名2... from 表名//查詢出指定列的數據
   select distinct 列名  from 表名//將指定的列的數據去除重複    distinct  有區別的
   select 列名1 as '別名',列名2 as '別名',.... from 表名//將查詢結果中的列起一個別名,但是原表中的列名不變
 
 9.對錶的字段(數值字段)進行排序
   select 列名1,列名2... from 表名 order by 列名 [ASC/DESC]//ASC 升序(默認); desc 降序
 
 10.聚合函數:
   a.count函數
   統計該表一共有多少行:
     select count(*) from 表名 [where 篩選條件]       一般可用於統計人數
   統計該列一共有多少條數據:(不包含值爲NULL列)
     select count(列名)  from 表名 [where 篩選條件] 
   b.sum函數
     select sum(列名) from 表名 [where 篩選條件]  //將該列數據相加
   c.avg函數
     select avg(列名) from 表名 [where 篩選條件] //將該列數據  相加÷該列一共有多條
 
 11.group by語句
  a.group by 後面跟單列
    //以gjp數據庫的gjp_ledger爲例
SELECT COUNT(*) as 'num',pstudy FROM person GROUP BY pstudy  //pstudy列合併同類項後分組顯示,同類項總數由count聚合

    SELECT SUM(money),parent FROM gjp_ledger GROUP BY parent;//以parent列分組
                                                             //將parent列中parent值相同的合併爲一組(支出組,收入組)
                                                              //分別對支出組和收入組進行money的求和
  b.group by後面跟多列                                  
  SELECT SUM(money),parent,account FROM gjp_ledger GROUP BY parent,account //將parent與account組合相同的分爲一組
                                                                           //parent與account有多少種組合,最終就有多少組
                                                                          //一般來說group by 後面跟的列 和select 後面查詢的列一一對應            
                                                                          //否則數據無意義
  c.having子句:
  SELECT SUM(money)AS 'sumMoney',parent FROM gjp_ledger  GROUP BY parent

  HAVING sumMoney >= 20000//HAVING之和group by 聯合使用,having是對分組後的結果進行過濾


爲什麼sql裏面not in後面的子查詢如果有記錄爲NULL的,主查詢就查不到記錄???原因很簡單: 
SELECT * 
FROM dbo.TableA AS a 
WHERE a.id NOT IN ( 2, NULL )


–等同於: 
SELECT * 
FROM Table_A AS a 
WHERE a.id <> 2 
AND a.ID <> NULL

由於NULL值不能參與比較運算符,導致條件不成立,查詢不出來數據。


MySQL中我們對數據表字段的修改命令使用alter

常用的方法

1.增加一個字段

alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一個字段,默認爲空
alter table user add COLUMN new2 VARCHAR(20) NOT NULL;    //增加一個字段,默認不能爲空

2.刪除一個字段

alter table user DROP COLUMN new2;                //刪除一個字段

3.修改一個字段

alter table user MODIFY new1 VARCHAR(10);            //修改一個字段的類型
alter table user CHANGE new1 new4 int;              //修改一個字段的名稱,此時一定要重新


//主鍵

alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

//增加一個新列

alter table t2 add d timestamp;
alter table infos add ex tinyint not null default ‘0′;

//刪除列

alter table t2 drop column c;

//重命名列

alter table t1 change a b integer;

//改變列的類型

alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default ‘0′;

//重命名錶

alter table t1 rename t2;

加索引

mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);

加主關鍵字的索引

mysql> alter table tablename add primary key(id);

加唯一限制條件的索引

mysql> alter table tablename add unique emp_name2(cardnumber);

刪除某個索引

mysql>alter table tablename drop index emp_name;

增加字段:

mysql> ALTER TABLE table_name ADD field_name field_type;

修改原字段名稱及類型:

mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

刪除字段:

mysql> ALTER TABLE table_name DROP field_name;

mysql修改字段長度

alter table 表名 modify column 字段名 類型;

例如

數據庫中user表 name字段是varchar(30)

可以用

alter table user modify column name varchar(50) ;


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