sql update 多个字段_SQL学习之路-20190707
SQL 是一門 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言;為了與 ANSI 標準相兼容,它們必須以相似的方式共同地來支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等。
- RDBMS (Relational Database Management System,關系型數據庫)數據庫程序(比如 MS Access、SQL Server、MySQL)
- 使用服務器端腳本語言,比如 PHP 或 ASP
- 使用 SQL 來獲取您想要的數據
- 使用 HTML / CSS(層疊樣式表(Cascading Style Sheets,縮寫為CSS),是一種樣式表語言,用來描述HTML或XML(包括如SVG、MathML、XHTML之類的 XML 分支語言)文檔的呈現。CSS 描述了在屏幕、紙質、音頻等其它媒體上的元素應該如何被渲染的問題)
- 重要的SQL命令(對大小寫不敏感)
設置字符集:set 字段名稱 utf8;命令某字段使用的字符集;
返回不同值:
select distinct * from table_name;條件篩選:
SELECT * FROM Websites WHERE country='CN';(文本使用單引號,數值不需用)一些運算也可以在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;插入數據:
插入列值: INSERT INTO table_name VALUES (value1,value2,value3,...); 插入指定列名值 INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);數據的更新UPDATE:
UPDATE Websites SET alexa='5000', country='USA' WHERE name='阿里云大學;數據刪除DELETE
DELETE FROM WebsitesWHERE name='百度' AND country='CN'; //刪除所有數據 DELETE FROM table_name; DELETE * FROM table_name;規定數量數據:
// "Websites" 表中選取頭兩條記錄 SELECT * FROM Websites LIMIT 2; //從 "Customers" 表中選取前面 50% 的記錄: SELECT TOP 50 PERCENT * FROM Websites;相似數據查詢:
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" 開始的所有網站: 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選擇性數據服務:
// SQL 語句選取 name 為 "Google" 或 "速學堂" 的所有網站 SELECT * FROM Websites WHERE name IN ('Google','速學堂');一定范圍內數據獲取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; //兩張表查詢聯合查詢 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 創建數據表:
CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) );SQL UNIQUE約束:
//表已創建,添加UNIQUE約束 ALTER TABLE table_nameADD UNIQUE (colunm_name) //表已創建,添加多個UNIQUE約束 ALTER TABLE table_name ADD CONSTRAINT uc_PersonID UNIQUE (colunm_name1,colunm_name2) //表已創建,撤銷UNIQUE約束 ALTER TABLE Persons DROP INDEX uc_PersonIDSQL PRIMARY KEY 約束(主鍵):
//表已創建,添加主鍵約束 ALTER TABLE Persons ADD PRIMARY KEY (colunm_name) //表已創建,添加多個主鍵約束 ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (colunm_name1,colunm_name2)FOREIGN KEY 約束 外鍵
// "Orders" 表創建時在 "P_Id" 列上創建 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) ) //表已經存在時加外鍵約束 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語句
用于表中創建索引,方便數據的快速查找
CREATE INDEX index_name ON table_name (column_name) 創建不止一個列: 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(數據類型) //刪除列 ALTER TABLE table_name DROP COLUMN column_name //改變列的類型 ALTER TABLE table_name ALTER COLUMN column_name new_datatype(新的數據類型)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函數
NOW() //返回當前時間 CURDATE() //返回當前日期和時間 CURTIME() //返回當前時間 DATE() //提取時間或日期、時間表達式的日期部分 EXTRACT() //返回日期、時間的單獨部分 DATEPART() //返回日期、時間的單獨部分 DATE_ADD() //向日期添加時間間隔 DATE_SUB() //從日期減去指定的時間間隔 DATEDIFF() //返回兩個日期之間的天數 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代表遺漏的未知數據 通過IS NULL 和 IS NOT NULL 查詢字段是否為NULL SELECT LastNmae,FirstName,Address FROM Person WHERE Address IS NULLSQL通用數據類型
CHARACTER(n) 字符/字符串。固定長度 n。 VARCHAR(n) 或 CHARACTER VARYING(n) 字符/字符串。可變長度。最大長度 n。 BINARY(n) 二進制串。固定長度 n。 BOOLEAN 存儲 TRUE 或 FALSE 值 VARBINARY(n) 或 BINARY VARYING(n) 二進制串。可變長度。最大長度 n。 INTEGER(p) 整數值(沒有小數點)。精度 p。 SMALLINT 整數值(沒有小數點)。精度 5。 INTEGER 整數值(沒有小數點)。精度 10。 BIGINT 整數值(沒有小數點)。精度 19。 DECIMAL(p,s) 精確數值,精度 p,小數點后位數 s。例如:decimal(5,2) 是一個小數點前有 3 位數小數點后有 2 位數的數字。 NUMERIC(p,s) 精確數值,精度 p,小數點后位數 s。(與 DECIMAL 相同) FLOAT(p) 近似數值,尾數精度 p。一個采用以 10 為基數的指數計數法的浮點數。該類型的 size 參數由一個指定最小精度的單一數字組成。 REAL 近似數值,尾數精度 7。 FLOAT 近似數值,尾數精度 16。 DOUBLE PRECISION 近似數值,尾數精度 16。 DATE 存儲年、月、日的值。 TIME 存儲小時、分、秒的值。 TIMESTAMP 存儲年、月、日、小時、分、秒的值。 INTERVAL 由一些整數字段組成,代表一段時間,取決于區間的類型。 ARRAY 元素的固定長度的有序集合 MULTISET 元素的可變長度的無序集合 XML 存儲 XML 數據MY SQL數據類型
//在 MySQL 中,有三種主要的類型:Text(文本)、Number(數字)和 Date/Time(日期/時間)類型 *******************************Text 類型 ******************************* 數據類型 描述 CHAR(size) 保存固定長度的字符串(可包含字母、數字以及特殊字符)。在括號中指定字符串的長度。最多 255 個字符。 VARCHAR(size) 保存可變長度的字符串(可包含字母、數字以及特殊字符)。在括號中指定字符串的最大長度。最多 255 個字符。注釋:如果值的長度大于 255,則被轉換為 TEXT 類型。 TINYTEXT 存放最大長度為 255 個字符的字符串。 TEXT 存放最大長度為 65,535 個字符的字符串。 BLOB 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字節的數據。 MEDIUMTEXT 存放最大長度為 16,777,215 個字符的字符串。 MEDIUMBLOB 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字節的數據。 LONGTEXT 存放最大長度為 4,294,967,295 個字符的字符串。 LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字節的數據。 ENUM(x,y,z,etc.) 允許您輸入可能值的列表。可以在 ENUM 列表中列出最大 65535 個值。如果列表中不存在插入的值,則插入空值。注釋:這些值是按照您輸入的順序排序的。可以按照此格式輸入可能的值: ENUM('X','Y','Z') SET 與 ENUM 類似,不同的是,SET 最多只能包含 64 個列表項且 SET 可存儲一個以上的選擇。 *******************************Number 類型 ******************************* 數據類型 描述 TINYINT(size) -128 到 127 常規。0 到 255 無符號*。在括號中規定最大位數。 SMALLINT(size) -32768 到 32767 常規。0 到 65535 無符號*。在括號中規定最大位數。 MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 無符號*。在括號中規定最大位數。 INT(size) -2147483648 到 2147483647 常規。0 到 4294967295 無符號*。在括號中規定最大位數。 BIGINT(size) -9223372036854775808 到 9223372036854775807 常規。0 到 18446744073709551615 無符號*。在括號中規定最大位數。 FLOAT(size,d) 帶有浮動小數點的小數字。在 size 參數中規定最大位數。在 d 參數中規定小數點右側的最大位數。 DOUBLE(size,d) 帶有浮動小數點的大數字。在 size 參數中規定最大位數。在 d 參數中規定小數點右側的最大位數。 DECIMAL(size,d) 作為字符串存儲的 DOUBLE 類型,允許固定的小數點。在 size 參數中規定最大位數。在 d 參數中規定小數點右側的最大位數。 *這些整數類型擁有額外的選項 UNSIGNED。通常,整數可以是負數或正數。如果添加 UNSIGNED 屬性,那么范圍將從 0 開始,而不是某個負數。 *******************************Date 類型 ******************************* 數據類型 描述 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) 至今的秒數來存儲。格式: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函數
//SQL擁有很多用于計數和計算的內建函數 *******************************SQL Aggregate 函數 ******************************* //SQL Aggregate 函數計算從列中取得的值,返回一個單一的值。 AVG() - 返回平均值 COUNT() - 返回行數 FIRST() - 返回第一個記錄的值 LAST() - 返回最后一個記錄的值 MAX() - 返回最大值 MIN() - 返回最小值 SUM() - 返回總和 *******************************SQL Scalar 函數 ******************************* UCASE() - 將某個字段轉換為大寫 LCASE() - 將某個字段轉換為小寫 MID() - 從某個文本字段提取字符 LEN() - 返回某個文本字段的長度 ROUND() - 對某個數值字段進行指定小數位數的四舍五入 NOW() - 返回當前的系統日期和時間 FORMAT() - 格式化某個字段的顯示方式 *******************************AVG() 函數 ******************************* //AVG()函數返回數值列的平均值 select avg(column_name) as avg from tablename; *******************************COUNT() 函數 ******************************* SELECT COUNT(column_name) FROM table_name; *******************************FIRST() 函數 ******************************* //只有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() 函數 ******************************* SELECT column_name FROM table_name order by column_name DESC LIMIT 1; //首條記錄 *******************************MAX() 函數 ******************************* SELECT MAX(column_name) as max FROM table_name; *******************************MIN() 函數 ******************************* SELECT MIN(column_name) as min FROM table_name; *******************************SUM() 函數 ******************************* 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相等的,統計note1901中id的總和,一規定格式輸出 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()函數 ******************************* //字段轉大寫 select ucase(name) as new_name,perid from note1901; *******************************LCASE()函數 ******************************* //字段轉小寫 select lcase(name) as new_name,perid from note1901; *******************************MID()函數 ******************************* //從文本字段中提取字符 SELECT MID(name,1,4) AS ShortTitle FROM Websites; //提取name字段中前5個字符 *******************************LENGTH()函數 ******************************* //返回文本字段中字符的長度(只適用于英文字符) select name,length(name) as name_len from note1901; *******************************ROUND()函數 ******************************* //ROUND() 函數用于把數值字段舍入為指定的小數位數 select ROUND(1.58); //結果為2,四舍五入 select ROUND(1.298, 1); //結果為1.3,保留1位小數 *******************************NOW()函數 ******************************* //NOW()函數返回當前系統的日期和時間 select name,now() as now_time from tablename; *******************************FORMAT()函數 ******************************* //FORMAT函數用于對字段的顯示進行格式化 select name,perid,date_format(now(),'%y-%m-%d') as now_date from tablename; ******************************* over(partition by 。。。) ******************************* over函數的寫法: over(partition by class order by sroce) 按照sroce排序進行累計,order by是個默認的開窗函數,按照class分區。 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3和2的区别大吗_pytho
- 下一篇: mysql 8安装_mysql安装过程详