mysql必知必會系列(一)


mysql必知必會系列是本人在讀《mysql必知必會》中的筆記,方便自己以后查看。

MySQL、 Oracle以及Microsoft SQL Server等數據庫是基於客戶機—服務器的數據庫。客戶機—服務器應用分為兩個不同的部分。服務器部分是負責所有數據訪問和處理的一個軟件。這個軟件運行在稱為數據庫服務器的計算機上。

在處理SQL語句時,其中所有空格都被忽略,sql語句不分大小寫。


 

一、基本知識

  • 數據庫(database) : 保存有組織的數據的容器(通常是一個文件或一組文件)。
  • 表(table): 某種特定類型數據的結構化清單。
  • 模式(schema):關於數據庫和表的布局及特性的信息。模式可以用來描述數據庫中特定的表以及整個數據庫(和其中表的關系)。如可以存儲什么樣的數據,數據如何分解,各部分信息如何命名等。
  • 列(column):表中的一個字段。所有表都是由一個或多個列組成的。
  • 行(row):表中的一個記錄。表中的數據是按行存儲的,所保存的每個記錄存儲在自己的行內。
  • 數據類型(datatype):所容許的數據的類型。
  • 每個表列都有相應的數據類型,它限制(或容許)該列中存儲的數據。數據類型還幫助正確地排序數據,並在優化磁盤使用方面起重要的作用。
  • 主鍵(primary key):一列(或一組列),其值能夠唯一區分表中每個行,任意兩行都不具有相同的主鍵值。

主鍵規定:
每個行都必須具有一個主鍵值(主鍵列不允許NULL值)。
不更新主鍵列中的值;
不重用主鍵列的值;
不在主鍵列中使用可能會更改的值。


 

二、關於使用數據庫

  • show databases;顯示所有數據庫

eg:show database; 

+--------------------+
| Database         |
+--------------------+
| information_schema |
| mysql                |
| jachin                |
+--------------------+

  • use databasename; 打開數據庫,才能讀取其中內容

    eg:use jachin; 使用jachin數據庫

  • show tables; 獲得一個數據庫內的表的列表

eg:show tables;
+---------------+
| Tables_in_ssm |
+---------------+
| appointment |
| book             |
+---------------+

 

  • show columns from tablename; 要求給出一個表名 ,它對每個字段返回一行,行中包含字段名、數據類型、是否允許NULL、鍵信息、默認值以及其他信息(如auto_increment)

eg: show columns from book;

  • help show ;  可以查看更多show的命令

 


三、 關於檢索

  • select columnname from tablename; 檢索某表下的某列內容
  • select columnname1,columnname2,columnname3 from tablename; 檢索某表下的某幾列內容
  • select * from tablename; 檢索整個表
  • select distinct columnname from tablename; 使用DISTINCT關鍵字,顧名思義,此關鍵字指示MySQL只返回不同的值
  • select columnname from tablename limit 5; 此語句使用SELECT語句檢索單個列從第一個行開始不多於5行。
  • select columnname from tablename limit 5,5; 指示MySQL返回從行5開始的5行。第一個數為開始位置,第二個數為要檢索的行數。
  • LIMIT 4 OFFSET 3:limit的另一種表達,意為從行3開始取4行,就像LIMIT 3, 4一樣(注意: LIMIT 1, 1將檢索出第二行而不是第一行)。

 

  1.完全限定

使用完全限定的名字來引用列(同時使用表名和列字)

  • select tablename.columnname from tablename;

eg: select book.name from book; 一般來說功能和 select name from book; 是一樣的。

 


 

同理,表名也可以使用完全限定

  • select tablename.columnname from databasename.tablename;

eg: select book.name from jachin.book;

   

  2.排序

  • select columnname from tablename order by columnname; ORDER BY子句取一個或多個列的名字,據此對輸出進行排序(ORDER BY(如從A到Z)順序排序,且用非檢索的列排序數據也是完全合法的)
  • select columnname from tablename order by A,B; 按多個列進行排序(如果A是姓列,B是名列,首先按姓排序,然后在每個姓中再按名排序)
  • order by ... DESC; 降序(從Z到A)排序,只應用到直接位於其前面的列名,如果想在多個列上進行降序排序, 必須對每個列指定DESC關鍵字,若不聲明DESC,則按默認的順序排序

eg:mysql> select * from book order by name ,number desc ;
+---------+--------+--------+
| book_id | name | number |
+---------+--------+--------+
| 1002   | c           | 10    |
| 1003   | c++       | 10    |
| 1004   | c++       | 10    |
| 1005   | c++       | 8      |
| 1000   | Java     | 8      |
| 1001   | python  | 10    |
+---------+--------+--------+

mysql> select * from book order by name desc ,number desc;
+---------+--------+--------+
| book_id | name | number |
+---------+--------+--------+
| 1001 | python | 10 |
| 1000 | Java | 8   |
| 1003 | c++   | 10 |
| 1004 | c++   | 10 |
| 1005 | c++   | 8   |
| 1002 | c       | 10 |
+---------+--------+--------+

  • select columnname from tablename order by columnname limit n; 如果使用LIMIT,它必須位於ORDER BY之后。

 

  3.WHERE

    只檢索所需數據需要指定搜索條件(search criteria),搜索條件也稱為過濾條件( filtercondition)。在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。  

WHERE子句在表名(FROM子句)之后給出:
select columnname from tablename where columnname=...;


在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之后:

select columnname1 from tablename where columnname1=... order by columnname2 desc;

eg:mysql> select * from book where name="c++" order by number desc ;

+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1003 | c++ | 10 |
| 1004 | c++ | 10 |
| 1005 | c++ | 8   |
+---------+------+--------+


 

為了檢查某個范圍的值,可使用BETWEEN操作符

select columnname1 from tablename where columnname1 between n and m;

eg: mysql> select * from book where number between 7 and 9 ;
+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1000 | Java  | 8        |
| 1005 | c++    | 8        |
+---------+------+--------+


SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是IS NULL子句
select columnname1 from tablename where columnname2 is null;

 

4.操作符

 用來聯結或改變WHERE子句中的子句的關鍵字。也稱為邏輯操作符( logicaloperator)如AND,OR等。

 SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。用括號可消除因為圓括號具有較AND或OR操作符高的計算次序,由於AND和OR較簡單,不再詳寫。

IN操作符

  • IN操作符用來指定條件范圍,范圍中的每個條件都可以進行匹配。 IN取合法值的由逗號分隔的清單,全都括在圓括號中。
  • IN用來指定要匹配值的清單的關鍵字,功能與OR相當。
  • 在使用長的合法選項清單時, IN操作符的語法更清楚且更直觀。
  • 在使用IN時,計算的次序更容易管理(因為使用的操作符更少)。
  • IN操作符一般比OR操作符清單執行更快。
  • IN的最大優點是可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句。

select columnname1 from tablename where columnname1 in (1,n);
selectcolumnname1 from tablename where columnname1=1,columnname1=2...,columnname1=n; 

以上兩句sql語句是等價的。


NOT操作符

WHERE子句中的NOT操作符有且只有一個功能,那就是否定它之后所跟的任何條件。


LIKE操作符

% 百分號表示任何字符出現任意次數
select columnname1 from tablename where columnname1 like "c%"; 可匹配任意以c開頭的字符串
注:WHERE name LIKE '%'不能匹配用值NULL的行

_ 下划線的用途與%一樣,但下划線只匹配單個字符而不是多個字符。
select columnname1 from tablename where columnname1 like "c_"; 可匹配任意以c開頭且后面接着只有一個字符的字符串


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM