查詢語句:select 語句
創新互聯是專業的清鎮網站建設公司,清鎮接單;提供成都網站建設、網站制作,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行清鎮網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
三種能力:投影、選擇、連接
投影:在一張二維表中根據所需要的條件選出所需要的列
選擇:在二維表中根據所需的條件選擇合適的行
連接:從一張或者多張表中獲取所需要的行,并且把這個行結合在一起的查詢
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表示觸發條件 。
用來查詢數據庫中表的數據。關鍵字: select 、where 等。
注:查詢只是對數據的一種顯示,不會對數據庫進行修改
1.查詢所有數據 : select * from 表 ; “*” 表示所有列; select id ,name, age, sex, birthday from 表 ; (注:全部字段寫法相對于“*”的寫法查詢效率要高,但寫法比較麻煩)
2.查詢部分列 : select 字段1, 字段2……. from 表 ;
3.別名查詢( 別名作用是方便觀看和處理數據)查詢時可以給表、列指定別名,關鍵字: AS
SELECT 字段1 AS 別名1,字段2 AS 別名2……. from 表; 或者 SELECT 字段1 別名1,字段2 別名2……. from 表 ; AS 可以不寫
4.清除重復值 ( 查詢指定列并且數據不出現重復 ): SELECT DISTINCT 字段1,字段2...... FORM 表;
5.查詢結果進行運算 ( 注意:參與計算列必須是數值類型 )
5.1與固定值計算: SELECT 列名1+固定值 FROM 表 ;
5.2列與列計算 : SELECT 列1+ 列2 FROM 表;
6.條件查詢 : SELECT * From 表 WHERE 字段 = 值;
一.錯誤日志
錯誤日志在Mysql數據庫中很重要,它記錄著mysqld啟動和停止,以及服務器在運行過程中發生的任何錯誤的相關信息。
1.配置信息
--log-error=[file-name]用來指定錯誤日志存放的位置。
如果沒有指定[file-name],默認hostname.err做為文件名,默認存放在DATADIR目錄中。
也可以將log-error配置到my.cnf文件中,這樣就省去了每次在啟動mysqld時都手工指定--log-error.例如:
[mysql@test2]$ vi /etc/my.cnf
# The MySQL server
[mysqld]
....
log-error = /var/lib/mysql/test2_mysqld.err
.....
2.錯誤信息樣板
080313 05:21:55 mysqld started
080313 5:21:55 InnoDB: Started; log sequence number 0 43655
080313 5:21:55 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.0.26-standard-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition - Standard (GPL)
080313 5:24:13 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown
080313 5:24:13 InnoDB: Starting shutdown...
080313 5:24:16 InnoDB: Shutdown completed; log sequence number 0 43655
080313 5:24:16 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
080313 05:24:16 mysqld ended
080313 05:24:47 mysqld started
080313 5:24:47 InnoDB: Started; log sequence number 0 43655
080313 5:24:47 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.0.26-standard-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition - Standard (GPL)
080313 5:33:49 [Note] /usr/local/mysql/bin/mysqld: Normal shutdown
三.查詢日志
查詢日志記錄了clinet的所有的語句。
Note:由于log日志記錄了數據庫所有操作,對于訪問頻繁的系統,此種日志會造成性能影響,建議關閉。
1.配置信息
--log=[file-name]用來指定錯誤日志存放的位置。
如果沒有指定[file-name],默認為主機名(hostname)做為文件名,默認存放在DATADIR目錄中。
也可以將log配置到my.cnf文件中,這樣就省去了每次在啟動mysqld時都手工指定--log.例如:
# The MySQL server
[mysqld]
......
#query-log
log = /var/lib/mysql/query_log.log
......
2.讀取查詢日志
查詢日志是純文本格可,可以使用OS文本讀取工具直接打開查看。例如:
[mysql@test2]$ tail -n 15 query_log.log
080313 7:58:28 17 Query show tables
080313 8:07:45 17 Quit
080313 10:01:48 18 Connect root@localhost on
080313 10:02:38 18 Query SELECT DATABASE()
18 Init DB test
080313 10:02:42 18 Query show tables
080313 10:03:07 18 Query select * from pet
080313 10:06:26 18 Query insert into pet values('hunter','yxyup','cat','f','1996-04-29',null)
080313 10:06:39 18 Query select * from pet
080313 10:07:13 18 Query update pet set sex='m' where name='hunter'
080313 10:07:38 18 Query delete from pet where name='hunter'
080313 10:13:48 18 Query desc test8
080313 10:14:13 18 Query create table t1(id int,name char(10))
080313 10:14:41 18 Query alter table t1 add sex char(2)
[mysql@test2]$
四.慢查詢日志
慢查詢日志是記錄了執行時間超過參數long_query_time(單位是秒)所設定值的SQL語句日志。
Note:慢查詢日志對于我們發現性能有問題的SQL有很幫助,建議使用并經常分析
1.配置信息
--log-slow-queries=[file-name]用來指定錯誤日志存放的位置。
如果沒有指定[file-name],默認為hostname-slow.log做為文件名,默認存放在DATADIR目錄中。
也可以將log-slow-queries配置到my.cnf文件中,這樣就省去了每次在啟動mysqld時都手工指定--log-slow-queries.例如:
# The MySQL server
[mysqld]
......
#slow-query-log
log-slow-queries = /var/lib/mysql/slow_query_log.log
......
2.讀取慢查詢日志
[mysql@test2]$ cat slow_query_log.log
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 5:41:46
# User@Host: root[root] @ localhost []
# Query_time: 108 Lock_time: 0 Rows_sent: 0 Rows_examined: 8738
use test;
select count(1) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name;
# Time: 080313 5:52:04
# User@Host: root[root] @ localhost []
# Query_time: 583 Lock_time: 0 Rows_sent: 0 Rows_examined: 508521177
select count(1) from t1 a, t1 b where a.id=b.id;
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 10:39:59
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 4537467 Rows_examined: 4537467
use test;
select id from tail;
如果慢查詢日志記錄很多可以使用mysqldumpslow進行分類匯總
[mysql@test2]$ mysqldumpslow slow_query_log.log
Reading mysql slow query log from slow_query_log.log
Count: 1 Time=583.00s (583s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
select count(N) from t1 a, t1 b where a.id=b.id
Count: 1 Time=108.00s (108s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
select count(N) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name
Count: 1 Time=11.00s (11s) Lock=0.00s (0s) Rows=4537467.0 (4537467), root[root]@localhost
select id from tail;
mysql有以下幾種日志:
錯誤日志: -log-err
查詢日志: -log
慢查詢日志: -log-slow-queries
更新日志: -log-update
二進制日志: -log-bin
在mysql的安裝目錄下,打開my.ini,在后面加上上面的參數,保存后重啟mysql服務就行了。
例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file. Otherwise a default name will be used.
#log=
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
查看日至:
1. 首先確認你日志是否啟用了
mysqlshow variables like 'log_bin';
如果啟用了,即ON
那日志文件就在mysql的安裝目錄的data目錄下
cat/tail 日志文件名
2. 怎樣知道當前的日志
mysql show master status;
3. 查看從某一段時間到某一段時間的日志
mysqlbinlog --start-datetime='2008-01-19 00:00:00'
--stop-datetime='2008-01-30 00:00:00' /var/log/mysql/mysql-bin.000006
mysqllog1.log
當前名稱:怎么記mysql筆記 Mysql筆記
瀏覽路徑:http://vcdvsql.cn/article14/hhhege.html
成都網站建設公司_創新互聯,為您提供做網站、ChatGPT、品牌網站設計、營銷型網站建設、靜態網站、微信公眾號
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯