假設(shè)A表有3個(gè)字段,ID, DATA1,DATA2
創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元平和做網(wǎng)站,已為上家服務(wù),為平和各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
簡(jiǎn)單的話可以不使用存儲(chǔ)過(guò)程,比如:
select * form A where ID in (select ID from A where DATA1 between 0 and 100)
如果你的應(yīng)用比較復(fù)雜,在嵌套中還有復(fù)雜的運(yùn)算,存儲(chǔ)過(guò)程可以如下例子:
CREATE PROCEDURE test(in_start int,in_end int)
BEGIN
DECLARE ids TEXT;
select GROUP_CONCAT(ID) into ids from A where DATA1 between in_start and in_end;
select * from A where FIND_IN_SET(ID,ids) 0;
END
注: in_start, in_end是DATA1的篩選范圍。 后面一個(gè)select直接返回一個(gè)表
直接用SQL和使用存儲(chǔ)過(guò)程各有利弊,存儲(chǔ)過(guò)程在你使用大量查詢及SQL運(yùn)算的時(shí)候效率很高,而且存儲(chǔ)過(guò)程一旦寫入數(shù)據(jù)庫(kù)會(huì)被自動(dòng)編譯運(yùn)行速度比較快,而SQL是每次執(zhí)行都需要被編譯一次的。但是存儲(chǔ)過(guò)程的調(diào)試比較麻煩,不像你使用編程語(yǔ)言和SQL的時(shí)候可以單步調(diào)試。而且如果沒有熟練掌握存儲(chǔ)過(guò)程的效率優(yōu)化情況下,使用存儲(chǔ)過(guò)程可能比使用SQL更慢。
天啦,你既然要用mysql,難道不看API手冊(cè)嗎?
給你個(gè)參考例子吧。
#include stdio.h
#include stdlib.h
#include stdarg.h
#include "mysql.h"
MYSQL *mysql;
MYSQL_RES *results;
MYSQL_ROW record;
static char *server_options[] = { "mysql_test", "--defaults-file=my.cnf" };
int num_elements = sizeof(server_options)/ sizeof(char *);
static char *server_groups[] = { "libmysqld_server", "libmysqld_client" };
int main(void)
{
mysql_server_init(num_elements, server_options, server_groups);
mysql = mysql_init(NULL);
mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
mysql_real_connect(mysql, NULL,NULL,NULL, "database1", 0,NULL,0);
mysql_query(mysql, "SELECT column1, column2 FROM table1");
results = mysql_store_result(mysql);
while((record = mysql_fetch_row(results))) {
printf("%s - %s \n", record[0], record[1]);
}
mysql_free_result(results);
mysql_close(mysql);
mysql_server_end();
return 0;
}
直接先用union all合并所有的表,再包一層select語(yǔ)句,將合并表作為子表查詢,加where條件即可,如果記錄重復(fù),可以加distinct關(guān)鍵字去重。
Mysql C API編程步驟
1、首先我們要包含mysql的頭文件,并鏈接mysql動(dòng)態(tài)庫(kù)。即添加以下語(yǔ)句:
#include WinSock2.h // 進(jìn)行網(wǎng)絡(luò)編程需要winsock2.h
#include mysql.h
#pragma comment(lib, “l(fā)ibmysql.lib”)
2、創(chuàng)建MYSQL變量。如:
MYSQL mysql;
3、初始化MYSQL變量。
mysql_init(mysql);
4、調(diào)用mysql_real_connect函數(shù)連接Mysql數(shù)據(jù)庫(kù)。mysql_real_connect函數(shù)的原型如下:
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag);
參數(shù)說(shuō)明:mysql–前面定義的MYSQL變量;host–MYSQL服務(wù)器的地址;user–登錄用戶名;passwd–登錄密碼;db–要連接的數(shù)據(jù)庫(kù);port–MYSQL服務(wù)器的TCP服務(wù)端口;unix_socket–unix連接方式,為NULL時(shí)表示不使用socket或管道機(jī)制;clientflag–Mysql運(yùn)行為ODBC數(shù)據(jù)庫(kù)的標(biāo)記,一般取0。連接失敗時(shí)該函數(shù)返回0。
5、調(diào)用mysql_real_query函數(shù)進(jìn)行數(shù)據(jù)庫(kù)查詢。mysql_real_query函數(shù)的原型如下:
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
參數(shù)說(shuō)明:mysql–前面定義的MYSQL變量;q–SQL查詢語(yǔ)句;length–查詢語(yǔ)句的長(zhǎng)度。
查詢成功則該函數(shù)返回0。
6、通過(guò)調(diào)用mysql_store_result或mysql_use_result函數(shù)返回的MYSQL_RES變量獲取查詢結(jié)果數(shù)據(jù)。
兩個(gè)函數(shù)的原型分別為:
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
這兩個(gè)函數(shù)分別代表了獲取查詢結(jié)果的兩種方式。第一種,調(diào)用mysql_store_result函數(shù)將從Mysql服務(wù)器查詢的所有數(shù)據(jù)都存儲(chǔ)到客戶端,然后讀取;第二種,調(diào)用mysql_use_result初始化檢索,以便于后面一行一行的讀取結(jié)果集,而它本身并沒有從服務(wù)器讀取任何數(shù)據(jù),這種方式較之第一種速度更快且所需內(nèi)存更少,但它會(huì)綁定服務(wù)器,阻止其他線程更新任何表,而且必須重復(fù)執(zhí)行mysql_fetch_row讀取數(shù)據(jù),直至返回NULL,否則未讀取的行會(huì)在下一次查詢時(shí)作為結(jié)果的一部分返回,故經(jīng)常我們使用mysql_store_result。
7、調(diào)用mysql_fetch_row函數(shù)讀取結(jié)果集數(shù)據(jù)。
上述兩種方式最后都是重復(fù)調(diào)用mysql_fetch_row函數(shù)讀取數(shù)據(jù)。mysql_fetch_row函數(shù)的原型如下:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
參數(shù)result就是mysql_store_result或mysql_use_result的返回值。
該函數(shù)返回MYSQL_ROW型的變量,即字符串?dāng)?shù)組,假設(shè)為row,則row〔i〕為第i個(gè)字段的值。當(dāng)?shù)浇Y(jié)果集尾部時(shí),此函數(shù)返回NULL。
8、結(jié)果集用完后,調(diào)用mysql_free_result函數(shù)釋放結(jié)果集,以防內(nèi)存泄露。mysql_free_result函數(shù)的原型如下:
void STDCALL mysql_free_result(MYSQL_RES *result);
9、不再查詢Mysql數(shù)據(jù)庫(kù)時(shí),調(diào)用mysql_close函數(shù)關(guān)閉數(shù)據(jù)庫(kù)連接。mysql_close函數(shù)的原型為:
void STDCALL mysql_close(MYSQL *sock);
1、 mysql安裝好后,在mysql的安裝目錄中有個(gè)bin目錄,里面有很多客戶端軟件,如果是mysql的客戶端,找到mysql.exe,這個(gè)是用于操作數(shù)據(jù)庫(kù)的系統(tǒng)客戶端軟件。
2、 客戶端選擇:一般情況下,我們?cè)趯W(xué)習(xí)的時(shí)候會(huì)通過(guò)使用Windows下的控制臺(tái)進(jìn)行訪問,即win + R 同時(shí)按住打開運(yùn)行,輸入cmd命令進(jìn)入控制臺(tái),然后進(jìn)入到mysql的bin目錄(具體可以看一下Windows下控制器切換路徑(百度經(jīng)驗(yàn)));或者在開發(fā)的時(shí)候通常會(huì)使用一些集成工具,如Navicat之類。
3、 數(shù)據(jù)庫(kù)操作步驟:學(xué)習(xí)的時(shí)候客戶端和服務(wù)端是同時(shí)安裝的,都在一臺(tái)電腦上,但是要理解,mysql的客戶端和服務(wù)端通常不會(huì)在一臺(tái)機(jī)器上的(服務(wù)器在機(jī)房,客戶端就在個(gè)人電腦上),因此是需要進(jìn)行一些步驟操作的。(下面以windows下的控制臺(tái)為例)
① 連接認(rèn)證:mysql/mysql.exe -h主機(jī)地址 -P端口 -u用戶名 -p密碼,其中h可以是ip地址也可以是主機(jī)名如-hlocalhost/-h127.0.0.1,本地可以省略;-P(大寫P)是端口,一般mysql是3306,默認(rèn)可以省略;-u是用戶名,如果沒有匿名賬號(hào),必填;-p(小寫p)是密碼,一般必填,最好是輸入-p后先回車,后輸入密碼(密文輸入密碼,更安全)
② 發(fā)送SQL指令,SQL(【百科】結(jié)構(gòu)化查詢語(yǔ)言Structured Query Language結(jié)構(gòu)化查詢語(yǔ)言)是mysql能識(shí)別的操作指令,這塊如果想深入學(xué)習(xí)理解可以參照MySQL的API文檔或者參考黑馬程序員下的6天玩轉(zhuǎn)MySQL,一般情況下分為幾大類:
DDL:Data Definition Language,數(shù)據(jù)定義語(yǔ)言,定義結(jié)構(gòu)。如創(chuàng)建數(shù)據(jù)庫(kù):create database `test` charset utf8;
DML:Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言,進(jìn)行數(shù)據(jù)操作。如增刪改查指令:insert into table values()/delete from table where condition/update table set key = value/select * from table
DCL:Data Controller Language,數(shù)據(jù)控制語(yǔ)言,進(jìn)行權(quán)限管理。如給用戶授權(quán):grant seletet on *.* to 'root'@localhost
③ 解析:一般情況下客戶端會(huì)自動(dòng)解析MySQL服務(wù)器執(zhí)行返回的結(jié)果不需要我們進(jìn)行額外操作,但是如果是其他編程語(yǔ)言需要使用MySQL執(zhí)行的結(jié)果,那么還需要額外的解析(參照黑馬程序員6天玩轉(zhuǎn)MySQL中的PHP操作mysql)
④ 斷開連接:數(shù)據(jù)庫(kù)用完之后,要養(yǎng)成主動(dòng)斷開的習(xí)慣(被動(dòng)也可以,但是如果被動(dòng)沒有斷開,那么就會(huì)“占線”),mysql的客戶端可以使用\q | quit | exit,任意一個(gè)退出
當(dāng)前題目:mysql怎么查詢編程 mysql在線編程
URL分享:http://jinyejixie.com/article34/dodpise.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、建站公司、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)、定制網(wǎng)站、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)