獲取資料庫表的信息
1.查詢資料庫中的所有資料庫名:
SELECT Name FROM Master..SysDatabases ORDER BY Name
2.查詢某個資料庫中所有的表名:
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name
3.查詢表結構信息:
1 SELECT (case when a.colorder=1 then d.name else null end) 表名,
2 a.colorder 欄位序號,a.name 欄位名,
3 (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 標識,
4 (case when (SELECT count(*) FROM sysobjects
5 WHERE (name in (SELECT name FROM sysindexes
6 WHERE (id = a.id) AND (indid in
7 (SELECT indid FROM sysindexkeys
8 WHERE (id = a.id) AND (colid in
9 (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
10 AND (xtype = 'PK'))>0 then '√' else '' end) 主鍵,b.name 類型,a.length 佔用位元組數,
11 COLUMNPROPERTY(a.id,a.name,'PRECISION') as 長度,
12 isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小數位數,(case when a.isnullable=1 then '√'else '' end) 允許空,
13 isnull(e.text,'') 默認值,isnull(g.[value], ' ') AS [說明]
14 FROM syscolumns a
15 left join systypes b on a.xtype=b.xusertype
16 inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
17 left join syscomments e on a.cdefault=e.id
18 left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
19 left join sys.extended_properties f on d.id=f.class and f.minor_id=0
20 where b.name is not null
21 --WHERE d.name='要查詢的表' --如果只查詢指定表,加上此條件
22 order by a.id,a.colorder
Ⅱ 如何用php獲取資料庫信息並顯示
獲取ppq資料庫的所有表名的代碼:
?php
$server='localhost';
$user='root';
$pass='12345';
$dbname='ppq';
$conn=mysql_connect($server,$user,$pass);
if(!$conn)
die("資料庫系統連接失敗!");
$result=mysql_list_tables($dbname);
if(!$result)
die("資料庫連接失敗!");
while($row=mysql_fetch_row($result))
{
echo
$row[0]."
";
}
mysql_free_result($result);
?
mysql_list_tables
(PHP
3,
PHP
4
,
PHP
5)
mysql_list_tables
--
列出
MySQL
資料庫中的表
說明
resource
mysql_list_tables
(
string
database
[,
resource
link_identifier])
mysql_list_tables()
接受一個資料庫名並返回和
mysql_query()
函數很相似的一個結果指針。用
mysql_fetch_array()或者用mysql_fetch_row()來獲得一個數組,數組的第0列就是數組名,當獲取不到時
mysql_fetch_array()或者用mysql_fetch_row()返回
FALSE。
Ⅲ 怎麼獲取access資料庫中的表數據
1,打開該access資料庫,資料庫工具,點擊關系。
2,然後便會出現各個表之間對應的關系。點擊它們之間的連線,右擊,便可以看到它們的關系了。
Ⅳ 從資料庫中獲得表中的數據
Adodc1.RecordSource = "select * from Table1" 'Adodc1是一個用來綁定資料庫的控制項,RecordSource是他的一個屬性,用來指定所用的記錄源,這里記錄源是一個select的SQL查詢語句 Adodc1.Refresh '刷新記錄源,一般綁定後不會立即顯示,需要刷新 If Adodc1.Recordset.RecordCount > 0 Then '如果記錄源的行數大於零,也就是不為空的意思 Do While Adodc1.Recordset.EOF = False 'DO While 。。。。loop 是一個循環語句, Adodc1.Recordset.EOF = False 是他的循環條件,意思是記錄源不到最後,則循環繼續 MS1.TextMatrix(MS1.Row, 0) = Adodc1.Recordset.Fields("學號") '用記錄源給MsflexGrid賦值,也算是綁定的意思吧,MS1.Row是一個行的變數,0是第一列(依此類推,1是第二列),意思是MsflexGrid的當前行第一列數據是記錄集中的 學號 欄位的值 MS1.TextMatrix(MS1.Row, 1) = Adodc1.Recordset.Fields("姓名") '解釋同上 MS1.TextMatrix(MS1.Row, 2) = Adodc1.Recordset.Fields("性別") '解釋同上 MS1.TextMatrix(MS1.Row, 3) = Adodc1.Recordset.Fields("年齡") '解釋同上 MS1.TextMatrix(MS1.Row, 4) = Adodc1.Recordset.Fields("籍貫") '解釋同上 MS1.TextMatrix(MS1.Row, 5) = Adodc1.Recordset.Fields("班級") '解釋同上 MS1.TextMatrix(MS1.Row, 6) = Adodc1.Recordset.Fields("學校") '解釋同上 MS1.TextMatrix(MS1.Row, 7) = Adodc1.Recordset.Fields("備注") '解釋同上 MS1.Row = MS1.Row + 1 '所操作的表格行數自動加1,也就是下移一行 Adodc1.Recordset.MoveNext '記錄集的指針下移一行 LOOP '繼續循環,達到退出循環條件時就會退出,條件是前面繼續循環條件的否定,也就是到達記錄集最後一條 END IF 'IF語句結束
Ⅳ java 獲取mysql 某個資料庫中所有表及表的列的信息
mysql裡面提供了很多方法來獲取表結構和表列:如下方法
獲得某表所有列的信息:
String sql = select * from tname;//tname為某一表名
Connection conn = ....;
Statement st = conn.createStatement();
ResultSet rs = st.rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int colcount = rsmd.getColumnCount();//取得全部列數
for(int i=0;i<colcount;i++){
String colname = rsmd.getColumnName(i);//取得全部列名
}
以上為某表欄位具體查詢,如果是查詢表的信息,如在mysql伺服器上那樣的查詢結果的話,可以用一下代碼:
ResultSet.executeQuery("show tables")可以的到所有的表信息。
ResultSet.executeQuery("describe tname")可以得到表的欄位信息。//tname為表名
Ⅵ mysql 查詢怎麼獲取資料庫下所有表的信息
show tables即為顯示當前資料庫中所有的表。又如:
mysql> use mysql
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
28 rows in set (0.05 sec)
這個是顯示「mysql」這個資料庫中的所有的表,一共有28張。
Ⅶ hibernate怎麼獲取資料庫表欄位等信息
hibernate怎麼獲取資料庫表欄位等信息
教你個方法:
List result = session.createSQLQuery(sql)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list()
用這個方法可以把資料庫查詢出來的每一行封裝成一個Map類型,Key為資料庫欄位,Value為值,
然後把這些Map放到了一個List裡面,
如果你只返回一條記錄:
那麼
Map<String, Object> map = (Map<String, Object>) result.get(0);
即可得到你這一行記錄轉換層的Map,
如果有多條,迭代List即可。
希望對你有幫助
Ⅷ 如何自動讀取資料庫中的信息,這里應該如何寫
用access自動獲取excel里的數據的方法就是通過代碼的方式導入。
如果是手動導入比較清楚的話,這個實現起來不難,請參考下面的介紹來實現:
首先,新建一個工程,在工程中引用如下對象ADO對象(用於連接ACCESS資料庫,可用其它方式),添加一個窗體(from1),在窗體上添加如下控制項:
兩個文本框,用來顯示EXCEL文件路徑和ACCESS路徑;
四個扭鈕,兩個用來游覽,另兩個是導入和退出;
兩個通用對話框控制項,用來打開ACCESS和EXCEL文件,一個進度條控制項,用來顯示導入進程。
該實例的導入是將ACCESS資料庫中表的欄位名單獨存放在另外一個表中,導入時按表中所存欄位名的順序進行導入,不是按EXCEL表的順序導入,這樣在實際中是很實用的.
Ⅸ 如何取得資料庫信息
取得視圖的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的視圖: USE DBAudit SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' 獲取指定資料庫的視圖的內容: EXEC sp_helptext xxxObject 取得存儲過程的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的存儲過程或者擴展存儲過程: USE DBAudit SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'P' OR type = 'X' 獲取指定資料庫的存儲過程或者擴展存儲過程的內容: EXEC sp_helptext xxxObject 無法獲取加密的存儲過程。擴展存儲過程只能得到dll 程序名。 取得函數的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的各種函數(內嵌函數等): USE DBAudit SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'FN' OR type = 'IF' OR type = 『TF』 獲取指定資料庫的函數的內容: EXEC sp_helptext xxxObject 只能獲取用戶定義的函數內容。 取得觸發器的方法 系統存儲過程 USE xxx EXEC sp_helptrigger xxxTable 或者 獲取指定資料庫的表的觸發器: SELECT sysobj1.name AS name, sysusers.name AS owner FROM sysobjects AS sysobj1 LEFT JOIN sysobjects AS sysobj2 ON sysobj1.parent_obj = sysobj2.id LEFT JOIN sysusers ON sysobj1.uid = sysusers.uid WHERE sysobj1.type = 'TR'AND sysobj2.name = 'xxxTable' 取得索引的方法 系統存儲過程 USE xxx EXEC sp_helpindex xxxTable 用戶 系統存儲過程 USE xxx EXEC sp_helpuser 角色 系統存儲過程 USE xxx EXEC sp_helprole 第二部分: 對於oracle 而言: ?ORACLE 只能連接特定資料庫,不能自動掃描資料庫對象。ORACLE 表必須用用戶來區別,否則表可能重名。ORACLE 不能區別系統表或者是用戶表,因此只能由管理員選擇掃描某些特定用戶的表。 取得資料庫名的方法 只能由用戶指定資料庫,不能自動掃描到特定資料庫伺服器上的所有資料庫。 取得表的方法 存儲資料庫表的系統表/視圖主要有: DBA_ALL_TABLES 描述資料庫中所有的對象以及相關的表。 ALL_ALL_TABLES 描述資料庫中所有的用戶可以訪問的對象以及相關的表。 USER_ALL_TABLES 描述資料庫中當前用戶擁有的對象以及相關的表。 DBA_ TABLES 描述資料庫中所有相關的表。 ALL_ TABLES 描述資料庫中所有的用戶可以訪問的相關的表。 USER_ TABLES 描述資料庫中當前用戶擁有的相關的表。 因此,可以從ALL_TABLES 中取得隸屬於指定用戶的表: SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE OWNER = 'DBAUDIT'; 取得隸屬於指定表空間的表: SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE TABLESPACE_NAME = 'DBAUDIT'; 也可以不指定用戶名,從而取得所有的表。 SELECT TABLE_NAME FROM SYS.ALL_TABLES; 取得列的方法 存儲資料庫表的列屬性的系統表/視圖主要有: DBA_TAB_COLUMNS 描述資料庫中所有的表的列屬性。 ALL_TAB_COLUMNS 描述資料庫中所有的用戶可以訪問的表的列屬性。 USER_TAB_COLUMNS 描述資料庫中當前用戶擁有的表的列屬性。 ALL_TAB_COLS 描述資料庫中所有的用戶可以訪問的表的列屬性。 因此,可以從ALL_TAB_COLUMNS 中取得隸屬於指定用戶的表: SELECT COLUMN_NAME FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME = 'TASK' AND OWNER = 'DBAUDIT'; 取得視圖的方法 存儲資料庫視圖的系統表/視圖主要有: DBA_VIEWS 描述資料庫中所有的視圖的屬性。 ALL_VIEWS 描述資料庫中所有的用戶可以訪問的視圖的屬性。 USER_VIEWS 描述資料庫中所有的當前用戶擁有視圖的屬性。 因此,可以從ALL_VIEWS 中取得隸屬於指定用戶的視圖: SELECT VIEW_NAME FROM SYS.ALL_VIEWS WHERE OWNER = 'DBAUDIT'; 取得存儲過程的方法 存儲系統對象的系統表/視圖有: DBA_OBJECTS 描述資料庫中所有的對象。 ALL_OBJECTS 描述資料庫中所有的可以訪問的對象。 USER_OBJECTS 描述資料庫中所有的當前用戶擁有的對象。 SYS_OBJECTS 描述資料庫中所有的系統對象。 對象類型有: CONSUMER GROUP CONTEXT DIRECTORY FUNCTION INDEX INDEX PARTITION INDEXTYPE JAVA CLASS JAVA DATA JAVA RESOURCE JAVA SOURCE LIBRARY LOB MATERIALIZED VIEW OPERATOR PACKAGE PACKAGE BODY PROCEDURE QUEUE SEQUENCE SYNONYM TABLE TABLE PARTITION TRIGGER TYPE TYPE BODY VIEW 因此,取得存儲過程可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE'; 取得隸屬於某個用戶的存儲過程可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE' AND OWNER = 『DBAUDIT』; 同樣,取得其他的對象也可以用這個方法,包括表,視圖等。 取得存儲過程內容的方法 對象類型為類型、類型體、過程、函數、包、包體,JAVA 源代碼的所有對象的源代碼都存儲在幾個系統表/視圖中: DBA_SOURCE 存儲所有資料庫對象的源代碼。 ALL_SOURCE 存儲所有可以訪問的資料庫對象的源代碼。 USER_SOURCE 存儲所有當前用戶擁有的資料庫對象的源代碼。 因此,取得存儲過程源代碼的方法: SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 『XXX』 AND TYPE = 『PROCEDURE』; 取得函數的方法 同上,取得函數可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION'; 取得隸屬於某個用戶的函數可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION' AND OWNER = 'DBAUDIT'; 取得函數內容可以用: SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'FUNCTION'; 取得觸發器的方法 存儲資料庫觸發器的系統表/視圖主要有: DBA_TRIGGERS 描述資料庫中所有的觸發器的屬性。 ALL_ TRIGGERS 描述資料庫中所有的用戶可以訪問的觸發器的屬性。 USER_ TRIGGERS 描述資料庫中所有的當前用戶擁有觸發器的屬性。 因此,可以從ALL_TRIGGERS 中取得隸屬於指定用戶的觸發器: SELECT TRIGGER_NAME FROM SYS.ALL_TRIGGERS WHERE OWNER = 'DBAUDIT'; 取得觸發器內容的方法: SELECT TRIGGER_BODY FROM SYS.ALL_TRIGGERS WHERE TRIGGER_NAME = 'XXX'; 取得索引的方法 存儲資料庫索引的系統表/視圖主要有: DBA_INDEXES 描述資料庫中所有的索引的屬性。 ALL_INDEXES 描述資料庫中所有的用戶可以訪問的索引的屬性。 USER_INDEXES 描述資料庫中所有的當前用戶擁有索引的屬性。 因此,可以從ALL_ INDEXES 中取得隸屬於指定用戶的索引: SELECT INDEX_NAME,TABLE_NAME FROM SYS.ALL_INDEXES WHERE OWNER = 'DBAUDIT'; 取得索引相關的列的方法: SELECT COLUMN_NAME FROM SYS.ALL_IND_COLUMNS WHERE INDEX_NAME = 'XXX' AND TABLE_OWNER = 'DBAUDIT'; 用戶 存儲資料庫用戶的系統表/視圖主要有: DBA_USERS 描述資料庫中所有的用戶的屬性。 ALL_USERS 描述資料庫中所有的用戶的屬性。 USER_USERS 描述資料庫中當前用戶的屬性。 因此,可以從ALL_USERS 中取得用戶: SELECT USER_ID, USERNAME FROM SYS.ALL_USERS; 角色 存儲角色的表/視圖有: DBA_ROLES 描述資料庫中所有角色。 取得角色方法: SELECT ROLE FROM SYS.DBA_ROLES; 表空間 SELECT TABLESPACE_NAME FROM SYS.DBA_TABLESPACES; 數據文件 SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME FROM SYS.DBA_DATA_FILES; 資料庫連接 存儲資料庫連接的系統表/視圖主要有: DBA_LINKS 描述資料庫中所有的連接的屬性。 ALL_LINKS 描述資料庫中所有的用戶可訪問的連接的屬性。 USER_LINKS 描述資料庫中當前用戶的連接屬性。 因此,可以從DBA_DB_LINKS 中取得連接: SELECT * FROM SYS.DBA_DB_LINKS; 同義詞 SELECT * FROM SYS.ALL_SYNONYMS WHERE TABLE_OWNER = 'DBAUDIT'; 程序包 取得程序包可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE'; 取得隸屬於某個用戶的程序包可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = 'DBAUDIT'; 取得程序包內容可以用: SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE'; 程序包體 取得程序包體可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY'; 取得隸屬於某個用戶的程序包可以用: SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY ' AND OWNER = 'DBAUDIT'; 取得程序包內容可以用: SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE BODY '; 第三部分: 簡單點的還有。 返回所有列名 select name from syscolumns where id=object_id('表名') 查所有表名 select * from INFORMATION_SCHEMA.TABLES =================================== sp_tableoption N'MyTable', 'text in row', 'OFF' Sybase 取得資料庫名的方法 系統存儲過程sp_helpdb 或者 USE master SELECT d.name dbname, u.name owner FROM sysdatabases d, sysusers u WHERE d.suid = u.suid 取得表的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的用戶表: USE DBAudit SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'U' 獲取指定資料庫的系統表: USE DBAudit SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'S' 或者統一使用: USE DBAudit SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND (type = 'U' OR type = 'S') 註: sysobjects 中type 欄位類型解釋: C = CHECK 約束 D = 默認值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日誌 FN = 標量函數 IF = 內嵌表函數 P = 存儲過程 PK = PRIMARY KEY 約束(類型是 K) RF = 復制篩選存儲過程 S = 系統表 TF = 表函數 TR = 觸發器 U = 用戶表 UQ = UNIQUE 約束(類型是 K) V = 視圖 X = 擴展存儲過程 取得列的方法 系統存儲過程 USE xxxDatabase EXEC sp_help xxxTable 取得視圖的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的視圖: USE xxx SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'V' 獲取指定資料庫的視圖的內容: EXEC sp_helptext xxxObject 取得存儲過程的方法 系統存儲過程 USE xxx EXEC sp_help 或者 獲取指定資料庫的存儲過程或者擴展存儲過程: USE xxx SELECT sysobjects.name name, sysusers.name owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND (type = 'P' OR type = 'X') 獲取指定資料庫的存儲過程或者擴展存儲過程的內容: EXEC sp_helptext xxxObject 無法獲取加密的存儲過程。擴展存儲過程只能得到dll 程序名。 取得函數的方法 Sybase 不支持用戶定義函數。
Ⅹ 怎樣用SQL語句查詢一個資料庫中的所有表
TABLE 語句
具體語法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
其實從語法上看,可以排序,也可以過濾記錄集,不過比較簡單,沒有 SELECT 那麼強大。
示例 1
簡單的建一張很小的表 y1,記錄數為 10 條。表 t1,插入 10 條記錄
mysql-(ytt/3305)->create table t1 (r1 int,r2 int);
Query OK, 0 rows affected (0.02 sec)
mysql-(ytt/3305)->insert into t1
with recursive aa(a,b) as (
select 1,1
union all
select a+1,ceil(rand()*20) from aa where a < 10
) select * from aa;
Query OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0
- 簡單全表掃描mysql-(ytt/3305)->select * from t1;+------+------+| r1 | r2 |+------+------+| 1 | 1 || 2 | 9 || 3 | 9 || 4 | 17 || 5 | 17 || 6 | 16 || 7 | 6 || 8 | 1 || 9 | 10 || 10 | 3 |+------+------+10 rows in set (0.00 sec)
- TABLE 結果mysql-(ytt/3305)->table t1;+------+------+| r1 | r2 |+------+------+| 1 | 1 || 2 | 9 || 3 | 9 || 4 | 17 || 5 | 17 || 6 | 16 || 7 | 6 || 8 | 1 || 9 | 10 || 10 | 3 |+------+------+10 rows in set (0.00 sec)
- 看下 table 的執行計劃mysql-(ytt/3305)->explain table t1 order by r1 limit 2G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 partitions: NULL type: ALLpossible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 10 filtered: 100.00 Extra: Using filesort1 row in set, 1 warning (0.00 sec)
- 其實可以看到 TABLE 內部被 MySQL 轉換為 SELECT 了。mysql-(ytt/3305)->show warningsG*************************** 1. row *************************** Level: Note Code: 1003Message: /* select#1 */ select `ytt`.`t1`.`r1` AS `r1`,`ytt`.`t1`.`r2` AS `r2` from `ytt`.`t1` order by `ytt`.`t1`.`r1` limit 21 row in set (0.00 sec)
- 那其實從上面簡單的例子可以看到 TABLE 在內部被轉成了普通的 SELECT 來處理。示例 2應用於子查詢里的子表。這里要注意,內表的欄位數量必須和外表過濾的欄位數量一致。克隆表 t1 結構mysql-(ytt/3305)->create table t2 like t1;Query OK, 0 rows affected (0.02 sec)
- 克隆表 t1 數據mysql-(ytt/3305)->insert into t2 table t1;Query OK, 10 rows affected (0.00 sec)Records: 10 Duplicates: 0 Warnings: 0
- table t1 被當做內表,表 t1 有兩個欄位,必須同時滿足 t2 檢索時過濾的欄位也是兩個。mysql-(ytt/3305)->select * from t2 where (r1,r2) in (table t1);+------+------+| r1 | r2 |+------+------+| 1 | 1 || 2 | 9 || 3 | 9 || 4 | 17 || 5 | 17 || 6 | 16 || 7 | 6 || 8 | 1 || 9 | 10 || 10 | 3 |+------+------+10 rows in set (0.00 sec)
- 注意:這里如果過濾的欄位數量和子表數量不一致,則會報錯。