A. 快速掌握MySQL資料庫中SELECT語句[1]
本文針對 MySQL 資料庫 中的SELECT語句快速精細掌握
MySQL中SELECT語句的基本語法是
Word WRAP: break word bgColor=#f f f > 以下是引用片段 SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT|DISTINCTROW|ALL] select_list [INTO {OUTFILE|DUMPFILE} file_name export_options][FROM table_references [WHERE where_definition][GROUP BY col_name ] [HAVING where_definition] [ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC] ] [LIMIT [offset ] rows] [PROCEDURE procere_name]]
從這個基本語法可以看出 最簡單的SELECT語句是SELECT select_list 實際上利用這個最簡單的SELECT語句 你也可以完成許多你期待的功能 首先你能利用它進行MySQL所支持的任何運算 例如 SELECT + 它將返回 ;其次 你也能利用它給變數賦值 而在 PHP 中 運用SELECT語句的這種功能 你就可以自由地運用MySQL的函數為PHP程序進行各種運算 並賦值給變數 在很多的時候 你會發現MySQL擁叢派運有許多比PHP更為功能強大的函數
STRAIGHT_JOIN SQL_SMALL_RESULT SQL_BIG_RESULT HIGH_PRIORITY是MySQL對ANSI SQL 的擴展 如果優化器以非最佳次序聯結表 使用STRAIGHT_JOIN可以加快查詢
SQL_SMALL_RESULT和SQL_BIG_RESULT是一組相對的關鍵詞 它們必須與GROUP BY DISTINCT或DISTINCTROW一起使用 SQL_SMALL_RESULT告知優化器結果會很小 要求MySQL使用臨時表存儲最終的表而不是使用排序;反之 SQL_BIG_RESULT告知優化器結果會很小 要求MySQL使用排序而不是做臨時表
HIGH_PRIORITY將賦予SELECT比一個更新表的語句更高的優先順序 使之可以進行一次優先的快速的查詢
以上四個關鍵詞的使用方法的確比較晦澀 幸運的是 在絕大多數情況下 在MySQL中我們完全可以選擇不使用這四個關鍵詞
DISTINCT DISTINCTROW對查詢返回的結果集提供了一個最基本但是很有用的過濾 那就是結果集中只含非重復行 在這里要注意的是 對關鍵詞DISTINCT DISTINCTROW來說 空值都是相等的滲梁 無論有多少NULL值 只選擇一個 而ALL的用法就有畫蛇添足之嫌了 它對結果集的產生沒有任何羨宴影響
INTO {OUTFILE|DUMPFILE} file_name export_options 將結果集寫入一個文件 文件在伺服器主機上被創建 並且不能是已經存在的 語句中的export_options部分的語法與用在LOAD DATAINFILE語句中的FIELDS和LINES子句中的相同 我們將在MySQL進階_LOAD DATA篇中詳細討論它 而OUTFILE與DUMPFILE的關鍵字的區別是 後前只寫一行到文件 並沒有任何列或行結束
select list 其中可以包含一項或多項下列內容
* 表示按照create table的順序排列的所有列
按照用戶所需順序排列的列名的清單
可以使用別名取代列名 形式如下 column name as column_heading
表達式(列名 常量 函數 或以算術或逐位運算符連接的列名 常量和函數的任何組合)
內部函數或集合函數
上述各項的任何一種組合
FROM 決定SELECT命令中使用哪些表 一般都要求有此項 除非select_list中不含列名(例如 只有常量 算術表達式等) 如果表項中有多個表 用逗號將之分開 在關鍵詞FROM後面的表的順序不影響結果
表名可以給出相關別名 以便使表達清晰 這里的語法是tbl_name [AS] alias_name 例如
select t name t salary from employee as t info as t where t name=t name與select t name t salary from employee t info t where t name=t name是完全等價的
所有對該表的其他引用 例如在where子句和having子句中 都要用別名 別名不能以數字開頭
lishixin/Article/program/MySQL/201311/29616
B. mysql 中怎麼用select * from TABLES
select 是mysql的查詢語句,使用前須指定使用的是哪個資料庫,
查看有哪些資料庫:
C. MySQL筆記1select基礎
查詢語句:select 語句
三種能力:投影、選擇、連接
投影:在一張二維表中根據所需要的條件選出所需要的列
選擇:在二維表中根據所需的條件選擇合適的行
連接:從一張或者多張表中獲取所需要的行,並且把這個行結合在一起的查詢
SQL語句大小寫不敏感。
select語句是可以計算的
算術表達式和判啟運算符優先順序
舉例:select ename,sal 12*sal+100 from emp
計算出年薪+100塊
NULL值是不可用,且未分配的,未知並且不適用的值,可以當成是保留值
AS其實可以省略
例如:select ename as name,sal salary from emp;
查詢出的欄位會自動換成別名
例子:select ename "Name",sal*12 "Annual Salary" from emp;
級聯操作是將列或字元串和其他列串聯,由兩條豎線(||)表示
select ename,job,ename || job as "Employees" from emp;
可以看出Employees就將ENAME和JOB進行結合的一個操作
在select句子中適用DISTINCT 關鍵字消除重復行
select distinct deptnp from emp;
限制選擇的行:
where關鍵字
如果where後面查的數據是字元串類型或者日期類型的要加''號
#######比較條件
舉幾個例子:
select ename,job,sal,deptno from emp where sal between 5000 and 10000;
這個是包含了5000和10000的
in的表達:
select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000);
只要mgr有括弧裡面的值都顯示出來。
通配符:%通配的是多個字元,_通配的是一個字元
IS NULL是查詢某個欄位為空的顯示出來
and、or、not
例子:
查如沖團詢sal>=2000和job的內容是包括MAN字元串的,當同時滿足兩個條件時候才返回結果。
and就是兩邊同時為真,or的話是有一邊為真就行,not就是不等於
ASC 升序,默認升序
DESC 降序
例子:
將deptno中進行升序渣橘排列,排列出來後,在將sal進行降序排列。
單行函數:就是對單行數據進行處理的函數,只針對這一條數據得出一個結果
函數工作的過程
ROUND(45.926,2)是將45.926這個數字的小數點後兩位進行四捨五入操作得到45.93
TRUNC(45.926,2) 是將45.926這個數字的小數點後兩位後面的進行丟掉。
返回當前系統日期
經常是不同類型之間的轉換
TO_CHAR就是將日期型數字型轉換成字元型
例子:
數字型的轉換
把字元轉換成數字:
把字元轉換成日期:
什麼是分組函數?
另外的名字叫多行函數,針對於多行數據進行一個匯總處理的一類函數,最後會得到一個匯總的結果。
例子:
其實就是對一系列數據找最大值
基本格式:select group_function(column),... from table [where condition];
首先對一個數據進行分類匯總把每一組的數據單獨的拿出來。就是對每一列數據的相同數據進行一個分組,然後在將分組後的結果再去執行select後面跟的一個分組函數的操作。
例子:
那下面這樣的怎麼操作呢?
其實就是對分組以後的結果再次進行一個限制篩選
where和Having的區別?
where是針對於整體的一個查詢結果
Having是針對於分組後的查詢結果的一個條件限制,它是不能單獨存在的,它只能夠在group by後面
下面是它的表達式:
顯示部門的最大平均薪水是多少
select max(avg(sal))
是這樣的一個嵌套
當我們查的數據存在於多個表的時候就需要多表查詢
下面是用到的表
一個是EMP的職員表、一個是DEPT的部分表
表連接的三種方式:
從總類上來看:自連接、等值連接、外連接(又可以分為三類:左連接、右連接、全連接)
自連接:一個表自己與自己建立連接成為自連接或自身連接。
在查詢的時候多表,這兩張表是同一張表,所以在查詢前我們需要對這個表進行一個別名的重命名。
舉例:查詢出員工編號、名字及其經理名字
MGR對應的是經理的ID號,這個對應的就是另一張經理表中的名字
表示比較連接列的值顯示出最終的一個結果,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
查詢員工的姓名 工作 部門號 部門名稱
左連接就是返回左邊的匹配行,不考慮右邊的表是否有相應的行
(+)的意思就是dept是個匹配表,左邊是一個基礎表,基礎表優先,如果右邊這個表找不到對應的值去匹配,會自動填空
右連接就是返回右邊的匹配行,不考慮左邊的表是否有相應的行,如果沒有會自動填空
左表右表都不做限制,所有的記錄都顯示,不足的地方用null填充
FULL JOIN表示emp和dept做一個全連接
ON表示觸發條件 。
D. MySQL 之 SELECT FOR UPDATE
FOR UPDATE 是一種行級鎖,又叫排它鎖。僅適用於 InnoDB ,並且必須開啟事務,在 BEGIN 與 COMMIT 之間才生效。
開啟兩個 MySQL 命令窗口
當 命前者令窗口1 執行完 SELECT ... FOR UPDATE 後(此時事務還未結扒悔旦束), 命令窗口2 執行 SELECT ... FOR UPDATE 語句時將會阻塞在那,直到 命令窗口1 中的事務結束(執行完 COMMIT )。
其中一個使用場景是用於修改訂單狀態,修改訂單狀態往往需要兩個步驟:
當有兩個任務同時請求時,有可能出現如下情況:
其中,任務B將訂單狀態改為3的前提是訂單狀態為1,但是上述情況下任務B修改訂單時訂單狀態已變成2了,春擾並不符合預期,通過 SELECT ... FRO UPDATE 就可以解決上述問題。
E. 查詢mysql資料庫中所有表名
使用select命令,可以查詢所有表名
寫法如下:
selecttable_namefrominformation_schema.tableswheretable_schema='當前資料庫'
(5)mysqlselect命令擴展閱讀
其它用法
1、使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3、選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4、查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5、創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6、顯示表的結構:
mysql> DESCRIBE MYTABLE;
7、往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8、用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9、導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
F. MYSQL的select語句
語法:select 欄位名 from 表名 where 條件如果你想要段喊顯示多個欄位的話: select 欄位名,欄位空叢名,.....,欄位名 from 表名 where 條件你斗燃櫻問的問題寫法應該是:select username from user where username='$username'
G. MYSQL列中的數據以逗號隔開,如何查詢
MYSQL列中的數據查詢命令:
SELECT *
FROMtask_detatils
WHERE FIND_IN_SET( 『1』, responsible_user)
命令的含義:將含有1的responsible_user列數據全部搜索出來。
採用的是find函數:查找一定范圍內元素的個數。查找[first,last)范圍內,與物慧toval等價的第一個元素,返回一個迭代器。如果沒有這個元素,將返回last。
(7)mysqlselect命令擴展閱讀:
其他的查詢命令:
在命令後鍵入搜索的模式,再鍵入要搜索的文件。其中,文件名列表中也可以使用特殊字元,如「*」等,用來生成文件名列表。
如果想在搜索的模式中包含有空格的字元串,可以用單引號把要搜索的模式括起來,用來表明搜索的模式是由包含空格的字元串組成。
否則,Shell將把空格認為是命令行參數的定界符,而grep命令將把搜索模式中的單詞解釋為文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式「text file」。
用戶可以在命令行知渣上用Shell特殊字元來生成將要搜索的文件名列表。在下面的例搭螞悄子中,特殊字元「*」用來生成一個文件名列表,該列表包含當前目錄下所有的文件。該命令將搜索出當前目錄下所有文件中與模式匹配的行。
H. select@i:=0是什麼意思
從MySQL資料庫獲取數據的命飢枝令變數的自增為0。SELECT命令用於從MySQL資料庫獲液肢改取數據,select@i:=0就是從MySQL資料庫獲取數據的命令變數的自增鬧判為0。MySQL是一個關系型資料庫管理系統,由瑞典MySQLAB公司開發,屬於Oracle旗下產品。
I. mysql常用命令都有哪些
1.導出整個資料庫
mysqlmp-u用戶名-p–default-character-set=latin1資料庫名》導出的文件名(資料庫默認編碼是latin1)23mysqlmp-uwcnc-psmgp_apps_wcnc》wcnc.sql
2.導出一個表
mysqlmp-u用戶名-p資料庫名表名》導出的文件名23mysqlmp-uwcnc-psmgp_apps_wcncusers》wcnc_users.sql
3.導出一個資料庫結構
mysqlmp-uwcnc-p-d–add-drop-tablesmgp_apps_wcnc》d:wcnc_db.sql23-d沒有數據–add-drop-table在每個create語句之前增加一個droptable
4.導入資料庫
A:常用source命令23進入mysql資料庫控制台,45如mysql-uroot-p67mysql》use資料庫89然後使用source命令,後面參數為腳本文件(如這里用到的.sql)1011mysql》sourcewcnc_db.sql1213B:使用mysqlmp命令1415mysqlmp-uusername-pdbname《filename.sql1617C:使用mysql命令1819mysql-uusername-p-Ddbname《filename.sql啟動與退出
1、進入MySQL:啟動MySQLCommandLineClient(MySQL的DOS界面),直接輸入安裝時的密碼即可。此時的提示符是:mysql》
2、退出MySQL:quit或exit
5.創建資料庫
命令:createdatabase《資料庫名》
例如:建立一個名為xhkdb的資料庫
mysql》createdatabasexhkdb;
6.顯示所有的資料庫
命令:showdatabases(注意:最後有個s)
mysql》showdatabases;
7.刪除資料庫
命令:dropdatabase《資料庫名》
8.連接資料庫
命令:use《資料庫名》
例如:如果xhkdb資料庫存在,嘗試存取它:
9.查看當前使用的資料庫
mysql》selectdatabase();
10.當前資料庫包含的表信息:
mysql》showtables;(注意:最後有個s)