數據庫謂詞


謂詞:屬於函數的一種,但其返回值是真值(true/false/unknown)

判斷是否存在滿足某種條件的記錄,存在返回TRUE、不存在返回FALSE。
比較多用到的幾種謂詞:

  • LIKE
  • BETWEEN
  • IS NULL/IS NOT NULL
  • IN
  • EXISTS

LIKE謂詞——字符串的部分一直查詢(模糊查詢)

--MySQL
--DDL:創建表
CREATE TABLE SampleLike
( strcol VARCHAR(6) NOT NULL,
	PRIMARY KEY (strcol));

--DML:插入數據
START TRANSACTION;
INSERT INTO SampleLike (strcol) VALUES ('abcddd');
INSERT INTO SampleLike (strcol) VALUES ('dddabc');
INSERT INTO SampleLike (strcol) VALUES ('abdddc');
INSERT INTO SampleLike (strcol) VALUES ('abcdd');
INSERT INTO SampleLike (strcol) VALUES ('ddabc');
INSERT INTO SampleLike (strcol) VALUES ('abddc');
COMMIT;

1.前方一致查詢,查詢對象字符串起始部分相同的記錄值的查詢方法。

-- 匹配以ddd開始的字符串
select * from SampleLike where strcol LIKE 'ddd%';  

2.中間一致查詢

-- 匹配包含ddd的字符串
select * from SampleLike where strcol LIKE '%ddd%';  

3.后方一致查詢

-- 匹配以ddd結尾的字符串
select * from SampleLike where strcol LIKE '%ddd';  

4.使用下划線_代替%,它代表的是任意一個字符

-- 匹配以abc開始的后面要有2個字符的字符串
select * from SampleLike where strcol LIKE 'abc__'; 

BETWEEN謂詞——范圍查詢

(注:會包含100和1000兩個臨界值,如果不需要,需使用

-- 包含臨界值100和1000
SELECT product_name, sale_price
	FROM Product
 WHERE sale_price BETWEEN 100 AND 1000;
 
-- 不包含臨界值
SELECT product_name, sale_price
 FROM Product
 WHERE sale_price > 100 
 AND sale_price < 1000;

is null, is not null判斷是否為空

為選取某些值為null的數據列,不能使用=,只能由is null

SELECT product_name, purchase_price
	FROM Product
 WHERE purchase_price IS NULL;

IN謂詞——OR的簡單用法(使用in代替or)

1.通過OR指定多個進貨單價查詢(閱讀性較差)

SELECT product_name, purchase_price
FROM Product
 WHERE purchase_price =  320
		OR purchase_price =  500
		OR purchase_price = 5000;  

2.通過in來指定多個進貨單價查詢(否定形式可以使用NOT IN來實現,注:IN和NOT IN無法選出NULL數據)

SELECT product_name, purchase_price
	FROM Product
 WHERE purchase_price IN (320, 500, 5000);

3.使用子查詢作為IN謂詞的參數

SELECT product_name, sale_price
   FROM Product
 WHERE product_id IN (SELECT product_id 
                         FROM ShopProduct
                       WHERE shop_id = '000C');

EXIST謂詞

注:實際上不使用EXIST基本上也都可以使用IN(或NOT IN)來替代

SELECT product_name, sale_price
FROM Product AS P
 WHERE EXISTS (SELECT *
				FROM ShopProduct AS SP
				WHERE SP.shop_id = '000C'
					AND SP.product_id = P.product_id);
-- 創建ShopProduct商店商品表
CREATE TABLE ShopProduct
(shop_id    CHAR(4)       NOT NULL,
 shop_name  VARCHAR(200)  NOT NULL,
 product_id CHAR(4)       NOT NULL,
 quantity   INTEGER       NOT NULL,
 PRIMARY KEY (shop_id, product_id));
 
-- MySQL
START TRANSACTION;

INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',	'北京',		'0001',	30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',	'北京',		'0002',	50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',	'北京',		'0003',	15);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',	'上海',	'0002',	30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',	'上海',	'0003',	120);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',	'上海',	'0004',	20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',	'上海',	'0006',	10);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',	'上海',	'0007',	40);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',	'深圳',		'0003',	20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',	'深圳',		'0004',	50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',	'深圳',		'0006',	90);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',	'深圳',		'0007',	70);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000D',	'廣州',		'0001',	100);

COMMIT;
		


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM