select 查詢
指從現存的一個或多個表中查看滿足條件的數據。
1、Select語句常規用法:
~~~
Select * from students; ##查看表中所有數據
Select sid,sname from students; ##查看所有的sid和sname
Select sid,sname from students where sid=1; ##查看符合條件的數據
Select * from students order by sid; ##查看排序后的數據
Select sex,count(*) from students group by sex having count(*)>=2; ##查看分組的數據
Select * from students a inner join students2 b on a.sid=b.sid; ##查看兩個表鏈接后的數據
Select sid as a,sname as b from students; ##字段使用別名的方法1
Select sid a,sname b from students; ##字段使用別名的方法2
~~~
Where子句代表只查詢滿足條件的表數據,如果沒有where子句則代表查詢表中所有的數據
2、查詢t1和t2表中所有的字段
~~~
SELECT * FROM t1 INNER JOIN t2 ...
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...
~~~
3、Select_expr也可以使用MySQL內部的函數,另外字段也可以使用別名。
concat–連接字符串
concat函數可以連接一個或者多個字符串,若其中一個為null,則返回null。
~~~
SELECT CONCAT(last_name,', ',first_name) AS full_name
FROM mytable ORDER BY full_name;
SELECT CONCAT(last_name,', ',first_name) full_name
FROM mytable ORDER BY full_name;
~~~
Where條件中不能使用select_expr中定義的字段別名,因為語句執行順序是where在select之前,所以where在執行時字段別名未知。
`Select sid a,sname b from students where sid>1; ##正確的寫法`
4、From table_references子句中指定表名,tbl_name也可以指定別名,當涉及的表不在當前的數據庫時,需要使用db_name.tbl_name來指定表和所在的數據庫名
~~~
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;
SELECT t1.name, t2.salary FROM employee t1, info t2
WHERE t1.name = t2.name;
~~~
當多個表中有相同的字段名,且需要查詢出來時,需要在select_expr中使用tbl_name.column_name來顯視指定要查詢哪個表的字段。
**執行過程:先執行from再執行where 最后執行select**
兩個表關聯查詢:
`select * from studnets a inner join test2.students b on a.sid=b.sid;`
有相同的字段名要指定表名,可以用表的別名:
`select a.sname from students a inner join test2.students b on a.sid-b.sid;`
5、group by 表示分組,通常和聚合函數配合使用,如最大值max,最小值min,平均值avg,個數count,求和sum‘
~~~
insert into scores values(1,'english',80),
(1,'chinese',89),
(1,'math',90),
(2,'english',91),
(2,'chinese',89)
;
select sid,count(*),max(scores),min(scores),avg(scores),sum(scores) from scores group by sid;
~~~
6、order by 排序
三種方式:
~~~
SELECT college, region, seed FROM tournament
ORDER BY region, seed;
SELECT college, region AS r, seed AS s FROM tournament
ORDER BY r, s;
SELECT college, region, seed FROM tournament
ORDER BY 2, 3;
~~~
Order by子句表示查詢結果按照順序排列,默認是升序排列,可以指定DESC表明按照降序排列
7、having 子句一般是跟在group by子句之后,代表限制分組之后的結果
~~~
SELECT user, MAX(salary) FROM users
GROUP BY user HAVING MAX(salary) > 10;
~~~
8、Limit子句用來限制查詢結果的條數,其后可以帶兩位>0的整數,第一位代表offset,第二位代表取多少行
~~~
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows,等同于select * from tbl limit 0,5
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
~~~
9、其他語句:
Select … into語句代表將查詢結果寫入文件中或者定義的參數變量中
ALL/Distinct關鍵詞代表是否將查詢結果中完全重復的行都查詢出來,ALL是默認值代表都查詢出來,指定distinct代表重復行只顯示一次
select distinct sid from scores ;
與聚合函數共用:
`select count(*),count(all sid),count(distinct sid) from scores;`
10、select ..into 將查詢結果存入定義的變量或者文件。
Select … into語句代表將查詢結果存入定義的變量或者文件
(1)、SELECT ... INTO var_list將查詢結果存入定義的變量
`SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;`
當使用存入變量方法是,需要保證查詢結果返回一行,如果不返回數據則報no data錯誤,如果返回多行則報Result consisted of more than one row錯誤,當返回行數不確定時,可以用limit 1強制只返回一行
~~~
mysql> select id into @y from teacher limit 1;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select @y;
+------+
| @y |
+------+
| 6 |
+------+
1 row in set (0.00 sec)
~~~
(2)、SELECT ... INTO OUTFILE將查詢結果按照一定的格式寫入到文件中
`SELECT sid,sname,gender INTO OUTFILE '/tmp/students.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM students;`
FIELDS TERMINATED 字段分隔符
[OPTIONALLY] ENCLOSED表示字段用什么字符包括起來,如果使用了OPTIONALLY則只有CHAR和VERCHAR被包括
LINES TERMINATED 表示每行記錄之間用什么分隔
#######執行報錯:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
#######My.ini配置文件中添加secure_file_priv=/tmp/后重啟再執行,成功
(3)、SELECT ... INTO DUMPFILE將查詢結果以一行的格式寫入到文件中,且只能寫入一行
~~~
mysql> select * into dumpfile '/tmp/students3.txt' from students;
ERROR 1172 (42000): Result consisted of more than one row
mysql> select * into dumpfile '/tmp/students4.txt' from students limit 1;
Query OK, 1 row affected (0.00 sec)
~~~
使用Select … into outfile ‘file_name’時,文件會創建在本地服務器上,所以要確保你的用戶能創建文件,而且此file_name不能已經存在在服務器上以免覆蓋其他文件
11、select中的表連接
join/inner join/cross join 三者意思一樣。
Join語句中表別名的用法
~~~
SELECT t1.name, t2.salary
FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;
SELECT t1.name, t2.salary
FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name;
~~~
From子句后面還可以跟子查詢,但子查詢必須帶別名
`SELECT * FROM (SELECT 1, 2, 3) AS t1;`
當inner join或者表之間用逗號隔開,且沒有表之間的關聯字段,則代表結果是兩者的笛卡爾積
`select t1.*,t2.* from teacher t1 ,dept t2;`
conditional_expr子句一般代表指定兩個表之間的關聯條件,而where條件中指定查詢結果的篩選條件
STRAIGHT_JOIN和Join的用法大致相同,唯一不同是確保左表是先被讀取的,以保證優化器的讀取順序
~~~
SELECT * FROM students INNER JOIN scores ON students.sid=scores.sid;
SELECT * FROM students LEFT JOIN scores ON students.sid=scores.sid;
SELECT * FROM students LEFT JOIN scores USING (sid); ####using表示兩張表的字段名稱一致。
SELECT * FROM students LEFT JOIN students2 ON students.sid=students2.sid
LEFT JOIN scores ON students2.sid=scores.sid;
~~~
12、union 將多個select語句的執行結果合并成一個結果。
第一個select語句的column_name會被當做最后查詢結果的列名,接下來的每個select語句所一一對應的列應該和第一個語句的列的數據類型最好保持一致
默認情況下union語句會把最終結果中的重復行去掉,這和增加distinct這個關鍵詞的作用一樣,如果使用union all則代表最終結果中的重復行保留
~~~
mysql> select sid,sname from students
union
select sid,gender from students2;
~~~
如果相對union語句的最后結果做排序或者limit限制,則需要將每個select語句用括號括起來,把order by或limit語句放在最后
~~~
(Select sid,sname from students)
Union
(Select sid,sname from students2)
order by sid limit 2;
+------+-------+
| sid | sname |
+------+-------+
| 1 | aaa |
| 2 | ccc |
+------+-------+
2 rows in set (0.00 sec)
~~~
- 一、日常運維腳本
- 1.1 批量創建用戶并賦予sudo權限
- 1.2 批量主機建立互信
- 1.3create_images.sh
- 1.4monitor.sh
- 1.5ftp腳本
- 1.6格式化分區
- 1.7簡單的遠程執行腳本
- 二、常用服務使用
- 1 ceph (分布式文件系統)
- 1.1 ceph 簡介
- 1.2 準備環境
- 1.3 開始部署
- 1.4 cephfs掛載
- 1.5 RBD塊存儲
- 1.6 object 對象存儲
- 1.7 集群擴展
- 1.7.1 增加刪除MON
- 1.7.2 增加刪除OSD
- 1.7.3 刪除MDS
- 注意事項
- 遇到的問題
- 1.8ceph查找數據文件
- 1.9卸載并清理環境
- 2、mysql (數據庫)
- 2.1 搭建
- 2.2 使用教程
- 2.2.1 mysql基礎配置
- 2.2.1.1 用戶權限管理
- 2.2.1.2用戶資源限制
- 2.2.1.3 密碼管理
- 2.2.1.4用戶lock
- 2.2.2mysql語法詳解
- 2.2.1建庫、表語句
- 2.2.2.2 插入 insert
- 2.2.2.3更新 update
- 2.2.2.4刪除 delete
- 2.2.2.5查詢 select
- 2.2.6視圖 索引 view index
- 2.2.7 修改 alert
- 2.2.2.8清理 truncate drop
- 2.2.9重命名 rename
- 示例語句
- 2.2.3mysql常用函數
- 2.3.1 對比操作符統概
- 2.3.2對比操作符詳解
- 2.3.3邏輯操作符
- 2.2.4分配操作符
- 2.2.5流程控制函數
- 2.2.6字符串函數
- 2.2.7字符串對比函數
- 2.2.8數字函數
- 2.2.9日期和時間函數
- 2.2.10聚合/格式轉換函數
- 2.2.11 子查詢
- 示例語句
- 2.2.4 mysql 高級應用
- 2.2.4.1 存儲過程 函數
- 2.2.4.2流程控制
- 2.2.4.3游標
- 2.2.4.4觸發器
- 課堂練習
- 2.2.2.5 數據庫設計
- 2.2.5.1 數據類型
- 2.2.5.2存儲引擎
- 2.2.6Innodb內核
- 1、innodb事務和多版本控制
- 2、體系結構
- 3、InnoDB配置
- 4、buffer pool設置
- 5、其他配置
- innodb限制
- 2.7 字符集
- 2.8鎖機制和事務
- 2.8.1鎖機制
- 2.8.2事務
- 2.9分區
- 2.9.1 自動分區
- 2.10復制
- 2.11mysql搬移數據目錄
- 2.12組復制 GR
- 簡介
- 搭建
- 2.3日常運維
- 2.3.1定時任務
- 2.4mycat
- 2.4.1 報錯分析
- 2.4.2 修改字符集
- 2.11 mycat使用
- 2.5遇到問題
- 2.5.1 表名庫名忽略大小寫
- 3、PAAS平臺搭建
- 問題匯總
- 1、docker
- 2、日常運維
- 3.1 Kubernetes
- 3.1 kubernetes 高版本搭建
- 4、GlusterFS搭建
- 5、MooseFS搭建
- 5.1搭建
- 5.2運維
- 5.2.1 mfs日志解析
- 5.2.2清理mfs的垃圾數據
- 5.2.3元數據故障恢復
- 5.2.4 MFS優化
- 5.2.5 配置機架感知
- 5.2.6 客戶端工具集
- 6、集群切換命令
- 7、ntp服務
- 8、monggoDB
- 8.1搭建單機
- 2、搭建集群及分片
- 9、MariaDB Galera Cluster
- 9.1源碼安裝MariaDB
- 9.2galera cluster 優劣
- 9.3 rpm安裝mariadb
- 10 HAproxy1.7搭建
- 11、sysbench 搭建使用
- 0.5版本
- 12 percona-xtradb-cluster
- 13http服務相關
- 13.1 http狀態碼解析
- 14 zookeeper
- 14.1 zookeeper日志查看
- 14.2 配置解析
- 14.3 優化
- 15搭建私有pip源
- 16/var/log的日志文件解釋
- 15 ansible的搭建及使用
- 15.1 搭建
- 15.2 使用說明
- 16. 搭建本地yum源
- zookeeper
- 優化
- 四、開發語言
- 1、GO語言
- 1.1go簡介
- 1.1.1hello_world初識GO
- 1.1.2并發介紹
- 1.1.3 chan介紹
- 1.1.4多返回值
- 1.2go基礎
- 1.2.1數據類型
- 1.2.2 go基礎結構
- 1.2.3 const及變量介紹
- 1.2.3os和time介紹
- 1.2.4 字符串
- 1.2.5條件判斷
- 1.2.6 homework
- go--help
- 1.3 go基礎2
- 1.3.1 數組 array
- 1.3.2切片 slice
- 1.3.3 時間和日期
- 1.3.4指針類型
- 1.3.5函數
- 1.3.6可變參數
- 1.3.7 defer
- 1.3.8遞歸
- 1.9閉包
- 1.10 map
- 1.11 sort
- 1.12 struct 結構體
- 2.perl語言
- 2.1 安裝lib包
- 3 python
- 1.語言基礎
- 2、編程教學
- 2.1變量和序列
- 2.2 條件語句