sql update 多个字段_SQL学习之路-20190707
SQL 是一門 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言;為了與 ANSI 標準相兼容,它們必須以相似的方式共同地來支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等。
- RDBMS (Relational Database Management System,關系型數(shù)據(jù)庫)數(shù)據(jù)庫程序(比如 MS Access、SQL Server、MySQL)
- 使用服務器端腳本語言,比如 PHP 或 ASP
- 使用 SQL 來獲取您想要的數(shù)據(jù)
- 使用 HTML / CSS(層疊樣式表(Cascading Style Sheets,縮寫為CSS),是一種樣式表語言,用來描述HTML或XML(包括如SVG、MathML、XHTML之類的 XML 分支語言)文檔的呈現(xiàn)。CSS 描述了在屏幕、紙質(zhì)、音頻等其它媒體上的元素應該如何被渲染的問題)
- 重要的SQL命令(對大小寫不敏感)
設置字符集:set 字段名稱 utf8;命令某字段使用的字符集;
返回不同值:
select distinct * from table_name;條件篩選:
SELECT * FROM Websites WHERE country='CN';(文本使用單引號,數(shù)值不需用)一些運算也可以在WHERE子句中使用:
示例表Websites:
SELECT * FROM Websites WHERE country='CN'AND alexa > 50; SELECT * FROM Websites WHERE country='USA'OR country='CN'; SELECT * FROM Websites WHERE alexa > 15AND (country='CN' OR country='USA');排序:
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC; (ASC:升序,DESC:降序) SELECT * FROM WebsitesORDER BY country,alexa;插入數(shù)據(jù):
插入列值: INSERT INTO table_name VALUES (value1,value2,value3,...); 插入指定列名值 INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);數(shù)據(jù)的更新UPDATE:
UPDATE Websites SET alexa='5000', country='USA' WHERE name='阿里云大學;數(shù)據(jù)刪除DELETE
DELETE FROM WebsitesWHERE name='百度' AND country='CN'; //刪除所有數(shù)據(jù) DELETE FROM table_name; DELETE * FROM table_name;規(guī)定數(shù)量數(shù)據(jù):
// "Websites" 表中選取頭兩條記錄 SELECT * FROM Websites LIMIT 2; //從 "Customers" 表中選取前面 50% 的記錄: SELECT TOP 50 PERCENT * FROM Websites;相似數(shù)據(jù)查詢:
SELECT * FROM Websites WHERE name LIKE 'G%'; SELECT * FROM Websites WHERE name LIKE '%k'; SELECT * FROM Websites WHERE name LIKE '%oo%'; SELECT * FROM Websites WHERE name NOT LIKE '%oo%';SOL通配符:
//SQL語句選取 name 以一個任意字符開始,然后是 "oogle" 的所有客戶 SELECT * FROM Websites WHERE name LIKE '_oogle'; //MySQL 中使用 REGEXP 或 NOT REGEXP 運算符 (或 RLIKE 和 NOT RLIKE) 來操作正則表達式。 //下面的 SQL 語句選取 name 以 "G"、"F" 或 "s" 開始的所有網(wǎng)站: SELECT * FROM Websites WHERE name REGEXP '^[GFs]'; //name字段以A-H開頭 SELECT * FROM Websites WHERE name REGEXP '^[A-H]'; //name字段不以A-H開頭 SELECT * FROM Websites WHERE name REGEXP '^[^A-H]';SQL IN選擇性數(shù)據(jù)服務:
// SQL 語句選取 name 為 "Google" 或 "速學堂" 的所有網(wǎng)站 SELECT * FROM Websites WHERE name IN ('Google','速學堂');一定范圍內(nèi)數(shù)據(jù)獲取Between:
SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20; SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20; SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN ('USA', 'IND'); SELECT * FROM Websites WHERE name BETWEEN 'A' AND 'H'; SELECT * FROM access_log WHERE date BETWEEN '2016-05-10' AND '2016-05-14';SQL別名操作:
SELECT name AS n, country AS c FROM Websites; SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites; //兩張表查詢聯(lián)合查詢 SELECT w.name, w.url, a.count, a.date FROM Websites AS w, access_log AS a WHERE a.site_id=w.id and w.name=“阿里云大學";SQL FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行:(Mysql中并不支持該命令,SQL Server 支持)
SELECT Websites.name, access_log.count, access_log.date FROM Websites FULL OUTER JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count DESC;SQL UNION 操作符:
//SQL語句從 "Websites" 和 "apps" 表中選取所有不同的country(只有不同的值) SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country; //選取所有,包括重復的值 SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY country; SELECT country, name FROM Websites WHERE country='CN' UNION ALL SELECT country, app_name FROM apps WHERE country='CN' ORDER BY country;SQL復制表信息到另一表中
INSERT INTO Websites (name, country) SELECT app_name, country FROM apps; // 帶條件復制 INSERT INTO Websites (name, country) SELECT app_name, country FROM apps WHERE id=1;SQL 創(chuàng)建數(shù)據(jù)表:
CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) );SQL UNIQUE約束:
//表已創(chuàng)建,添加UNIQUE約束 ALTER TABLE table_nameADD UNIQUE (colunm_name) //表已創(chuàng)建,添加多個UNIQUE約束 ALTER TABLE table_name ADD CONSTRAINT uc_PersonID UNIQUE (colunm_name1,colunm_name2) //表已創(chuàng)建,撤銷UNIQUE約束 ALTER TABLE Persons DROP INDEX uc_PersonIDSQL PRIMARY KEY 約束(主鍵):
//表已創(chuàng)建,添加主鍵約束 ALTER TABLE Persons ADD PRIMARY KEY (colunm_name) //表已創(chuàng)建,添加多個主鍵約束 ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (colunm_name1,colunm_name2)FOREIGN KEY 約束 外鍵
// "Orders" 表創(chuàng)建時在 "P_Id" 列上創(chuàng)建 FOREIGN KEY 約束: CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) ) //表已經(jīng)存在時加外鍵約束 ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) //撤銷外鍵約束 ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrdersCHECK 約束
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (P_Id>0) ) 撤銷 ALTER TABLE Persons DROP CHECK chk_PersonDEFAULT 約束,DEFAUT約束用于向列中插入默認值
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) DEFAULT 'Sandnes' )SQL CREATE INDEX語句
用于表中創(chuàng)建索引,方便數(shù)據(jù)的快速查找
CREATE INDEX index_name ON table_name (column_name) 創(chuàng)建不止一個列: CREATE INDEX index_name ON table_name (column_name1,column_name2) 撤銷index: ALTER TABLE table_name DROP INDEX index_nameALTER TABLE語句
//添加列 ALTER TABLE table_name MODIFY COLUMN column_name datatype(數(shù)據(jù)類型) //刪除列 ALTER TABLE table_name DROP COLUMN column_name //改變列的類型 ALTER TABLE table_name ALTER COLUMN column_name new_datatype(新的數(shù)據(jù)類型)AUTO INCREMENT字段(自動主鍵,序號自動加1)
CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID) ) //ID為主鍵字段,每條記錄遞增1 //定義以其他序列開始的定義 ALTER TABLE Persons AUTO_INCREMENT=100 //插入新記錄,自動增加主鍵值 INSERT INTO Person (FirstName,LastName) VALUES ('m1','m2')SQL視圖
CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=NoSQL Data函數(shù)
NOW() //返回當前時間 CURDATE() //返回當前日期和時間 CURTIME() //返回當前時間 DATE() //提取時間或日期、時間表達式的日期部分 EXTRACT() //返回日期、時間的單獨部分 DATEPART() //返回日期、時間的單獨部分 DATE_ADD() //向日期添加時間間隔 DATE_SUB() //從日期減去指定的時間間隔 DATEDIFF() //返回兩個日期之間的天數(shù) DATE_FORMAT() //用不同的格式顯示日期和時間 GETDATE() //返回當前的日期和時間 //時間格式 DATE - 格式:YYYY-MM-DD DATETIME - 格式:YYYY-MM-DD HH:MM:SS TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS YEAR - 格式:YYYY 或 YYSQL NULL值
NULL代表遺漏的未知數(shù)據(jù) 通過IS NULL 和 IS NOT NULL 查詢字段是否為NULL SELECT LastNmae,FirstName,Address FROM Person WHERE Address IS NULLSQL通用數(shù)據(jù)類型
CHARACTER(n) 字符/字符串。固定長度 n。 VARCHAR(n) 或 CHARACTER VARYING(n) 字符/字符串。可變長度。最大長度 n。 BINARY(n) 二進制串。固定長度 n。 BOOLEAN 存儲 TRUE 或 FALSE 值 VARBINARY(n) 或 BINARY VARYING(n) 二進制串。可變長度。最大長度 n。 INTEGER(p) 整數(shù)值(沒有小數(shù)點)。精度 p。 SMALLINT 整數(shù)值(沒有小數(shù)點)。精度 5。 INTEGER 整數(shù)值(沒有小數(shù)點)。精度 10。 BIGINT 整數(shù)值(沒有小數(shù)點)。精度 19。 DECIMAL(p,s) 精確數(shù)值,精度 p,小數(shù)點后位數(shù) s。例如:decimal(5,2) 是一個小數(shù)點前有 3 位數(shù)小數(shù)點后有 2 位數(shù)的數(shù)字。 NUMERIC(p,s) 精確數(shù)值,精度 p,小數(shù)點后位數(shù) s。(與 DECIMAL 相同) FLOAT(p) 近似數(shù)值,尾數(shù)精度 p。一個采用以 10 為基數(shù)的指數(shù)計數(shù)法的浮點數(shù)。該類型的 size 參數(shù)由一個指定最小精度的單一數(shù)字組成。 REAL 近似數(shù)值,尾數(shù)精度 7。 FLOAT 近似數(shù)值,尾數(shù)精度 16。 DOUBLE PRECISION 近似數(shù)值,尾數(shù)精度 16。 DATE 存儲年、月、日的值。 TIME 存儲小時、分、秒的值。 TIMESTAMP 存儲年、月、日、小時、分、秒的值。 INTERVAL 由一些整數(shù)字段組成,代表一段時間,取決于區(qū)間的類型。 ARRAY 元素的固定長度的有序集合 MULTISET 元素的可變長度的無序集合 XML 存儲 XML 數(shù)據(jù)MY SQL數(shù)據(jù)類型
//在 MySQL 中,有三種主要的類型:Text(文本)、Number(數(shù)字)和 Date/Time(日期/時間)類型 *******************************Text 類型 ******************************* 數(shù)據(jù)類型 描述 CHAR(size) 保存固定長度的字符串(可包含字母、數(shù)字以及特殊字符)。在括號中指定字符串的長度。最多 255 個字符。 VARCHAR(size) 保存可變長度的字符串(可包含字母、數(shù)字以及特殊字符)。在括號中指定字符串的最大長度。最多 255 個字符。注釋:如果值的長度大于 255,則被轉(zhuǎn)換為 TEXT 類型。 TINYTEXT 存放最大長度為 255 個字符的字符串。 TEXT 存放最大長度為 65,535 個字符的字符串。 BLOB 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字節(jié)的數(shù)據(jù)。 MEDIUMTEXT 存放最大長度為 16,777,215 個字符的字符串。 MEDIUMBLOB 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字節(jié)的數(shù)據(jù)。 LONGTEXT 存放最大長度為 4,294,967,295 個字符的字符串。 LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字節(jié)的數(shù)據(jù)。 ENUM(x,y,z,etc.) 允許您輸入可能值的列表。可以在 ENUM 列表中列出最大 65535 個值。如果列表中不存在插入的值,則插入空值。注釋:這些值是按照您輸入的順序排序的。可以按照此格式輸入可能的值: ENUM('X','Y','Z') SET 與 ENUM 類似,不同的是,SET 最多只能包含 64 個列表項且 SET 可存儲一個以上的選擇。 *******************************Number 類型 ******************************* 數(shù)據(jù)類型 描述 TINYINT(size) -128 到 127 常規(guī)。0 到 255 無符號*。在括號中規(guī)定最大位數(shù)。 SMALLINT(size) -32768 到 32767 常規(guī)。0 到 65535 無符號*。在括號中規(guī)定最大位數(shù)。 MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 無符號*。在括號中規(guī)定最大位數(shù)。 INT(size) -2147483648 到 2147483647 常規(guī)。0 到 4294967295 無符號*。在括號中規(guī)定最大位數(shù)。 BIGINT(size) -9223372036854775808 到 9223372036854775807 常規(guī)。0 到 18446744073709551615 無符號*。在括號中規(guī)定最大位數(shù)。 FLOAT(size,d) 帶有浮動小數(shù)點的小數(shù)字。在 size 參數(shù)中規(guī)定最大位數(shù)。在 d 參數(shù)中規(guī)定小數(shù)點右側(cè)的最大位數(shù)。 DOUBLE(size,d) 帶有浮動小數(shù)點的大數(shù)字。在 size 參數(shù)中規(guī)定最大位數(shù)。在 d 參數(shù)中規(guī)定小數(shù)點右側(cè)的最大位數(shù)。 DECIMAL(size,d) 作為字符串存儲的 DOUBLE 類型,允許固定的小數(shù)點。在 size 參數(shù)中規(guī)定最大位數(shù)。在 d 參數(shù)中規(guī)定小數(shù)點右側(cè)的最大位數(shù)。 *這些整數(shù)類型擁有額外的選項 UNSIGNED。通常,整數(shù)可以是負數(shù)或正數(shù)。如果添加 UNSIGNED 屬性,那么范圍將從 0 開始,而不是某個負數(shù)。 *******************************Date 類型 ******************************* 數(shù)據(jù)類型 描述 DATE() 日期。格式:YYYY-MM-DD注釋:支持的范圍是從 '1000-01-01' 到 '9999-12-31' DATETIME() *日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS注釋:支持的范圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' TIMESTAMP() *時間戳。TIMESTAMP 值使用 Unix 紀元('1970-01-01 00:00:00' UTC) 至今的秒數(shù)來存儲。格式:YYYY-MM-DD HH:MM:SS注釋:支持的范圍是從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC TIME() 時間。格式:HH:MM:SS注釋:支持的范圍是從 '-838:59:59' 到 '838:59:59' YEAR() 2 位或 4 位格式的年。注釋:4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。 *即便 DATETIME 和 TIMESTAMP 返回相同的格式,它們的工作方式很不同。在 INSERT 或 UPDATE 查詢中,TIMESTAMP 自動把自身設置 為當前的日期和時間。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。SQL函數(shù)
//SQL擁有很多用于計數(shù)和計算的內(nèi)建函數(shù) *******************************SQL Aggregate 函數(shù) ******************************* //SQL Aggregate 函數(shù)計算從列中取得的值,返回一個單一的值。 AVG() - 返回平均值 COUNT() - 返回行數(shù) FIRST() - 返回第一個記錄的值 LAST() - 返回最后一個記錄的值 MAX() - 返回最大值 MIN() - 返回最小值 SUM() - 返回總和 *******************************SQL Scalar 函數(shù) ******************************* UCASE() - 將某個字段轉(zhuǎn)換為大寫 LCASE() - 將某個字段轉(zhuǎn)換為小寫 MID() - 從某個文本字段提取字符 LEN() - 返回某個文本字段的長度 ROUND() - 對某個數(shù)值字段進行指定小數(shù)位數(shù)的四舍五入 NOW() - 返回當前的系統(tǒng)日期和時間 FORMAT() - 格式化某個字段的顯示方式 *******************************AVG() 函數(shù) ******************************* //AVG()函數(shù)返回數(shù)值列的平均值 select avg(column_name) as avg from tablename; *******************************COUNT() 函數(shù) ******************************* SELECT COUNT(column_name) FROM table_name; *******************************FIRST() 函數(shù) ******************************* //只有ACCESS支持FIRST SELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 1; //正序排序 SELECT column_name as first FROM table_name LIMIT 1; //首條記錄 *******************************Last() 函數(shù) ******************************* SELECT column_name FROM table_name order by column_name DESC LIMIT 1; //首條記錄 *******************************MAX() 函數(shù) ******************************* SELECT MAX(column_name) as max FROM table_name; *******************************MIN() 函數(shù) ******************************* SELECT MIN(column_name) as min FROM table_name; *******************************SUM() 函數(shù) ******************************* SELECT SUM(column_name) as sum FROM table_name; *******************************GROUP BY() 聚合語句 ******************************* //簡單應用 SELECT site_id, SUM(access_log.count) AS nums FROM access_log GROUP BY site_id; //多表連接 SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log LEFT JOIN Websites ON access_log.site_id=Websites.id GROUP BY Websites.name; *******************************HAVING子句 ******************************* //在tablename和note1901中perid相等的,統(tǒng)計note1901中id的總和,一規(guī)定格式輸出 select tablename.name,tablename.position,sum(note1901.id) as sumid from (note1901 inner join tablename on tablename.perid=note1901.perid) group by tablename.name having sum(note1901.id)>2; *******************************UCASE()函數(shù) ******************************* //字段轉(zhuǎn)大寫 select ucase(name) as new_name,perid from note1901; *******************************LCASE()函數(shù) ******************************* //字段轉(zhuǎn)小寫 select lcase(name) as new_name,perid from note1901; *******************************MID()函數(shù) ******************************* //從文本字段中提取字符 SELECT MID(name,1,4) AS ShortTitle FROM Websites; //提取name字段中前5個字符 *******************************LENGTH()函數(shù) ******************************* //返回文本字段中字符的長度(只適用于英文字符) select name,length(name) as name_len from note1901; *******************************ROUND()函數(shù) ******************************* //ROUND() 函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù) select ROUND(1.58); //結果為2,四舍五入 select ROUND(1.298, 1); //結果為1.3,保留1位小數(shù) *******************************NOW()函數(shù) ******************************* //NOW()函數(shù)返回當前系統(tǒng)的日期和時間 select name,now() as now_time from tablename; *******************************FORMAT()函數(shù) ******************************* //FORMAT函數(shù)用于對字段的顯示進行格式化 select name,perid,date_format(now(),'%y-%m-%d') as now_date from tablename; ******************************* over(partition by 。。。) ******************************* over函數(shù)的寫法: over(partition by class order by sroce) 按照sroce排序進行累計,order by是個默認的開窗函數(shù),按照class分區(qū)。 eg. SELECT * FROM (select t.name,t.class,t.sroce,rank() over(partition by t.class order by t.sroce desc) mm from T2_TEMP t) where mm = 1; 得到的結果是: dss 1 95 1 ffd 1 95 1 gds 2 92 1 gf 3 99 1 ddd 3 99 1SQL快速參考
總結
以上是生活随笔為你收集整理的sql update 多个字段_SQL学习之路-20190707的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3和2的区别大吗_pytho
- 下一篇: python怎样遍历列表中数字_关于Py