假設(shè)A表有3個字段,ID, DATA1,DATA2

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