乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      從零學(xué)數(shù)據(jù)庫mysql--SQL語言

       路人甲Java 2022-04-01

      SQL語言

      使用Navicate圖形化界面工具

      官網(wǎng)地址:http://www./download/direct-download?product=navicat_mysql_cs_x64.exe&location=1&support=Y
      網(wǎng)盤地址:
      https://pan.baidu.com/s/1_z9TbieMX9Kemnyj5WWrBQ

      字符集

      1. 字符集的由來:

      1. 計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼無論是計(jì)算機(jī)程序還是數(shù)據(jù),最終都會(huì)轉(zhuǎn)換成二進(jìn)制,計(jì)算機(jī)才能認(rèn)識(shí)。
      2. 為了計(jì)算機(jī)不只能做科學(xué)計(jì)算,也能處理文字信息。
        人們想出了給每一個(gè)文字符號(hào)編碼以便于計(jì)算識(shí)別處理的辦法,這就是計(jì)算機(jī)字符集的由來。

      2. ASSCII

      一套文字符號(hào)及其編碼,比較規(guī)則 的集合。 20世紀(jì)60年代初。美國標(biāo)準(zhǔn)化組織ANSI發(fā)布了第一個(gè)字符集。ASCII
      后來又進(jìn)一步變成了國際標(biāo)準(zhǔn)ISO-646

      1. 各大字符集:
        自ASCII后。為了處理不同的文字。各大計(jì)算機(jī)公司,各國,標(biāo)準(zhǔn)化政府,組織先后發(fā)明了幾百種字符集。
      1. ISO-8859
      2. GB2312-80
      3. GBK
      4. BIG5

      2. unicode

      1. 為了統(tǒng)一字符編碼。國際標(biāo)準(zhǔn)化組織ISO的一些成員國于1984年發(fā)起制定了新的國際字符集標(biāo)準(zhǔn)。容納全世界各種語言,文字,和 符號(hào)。最后這個(gè)標(biāo)準(zhǔn)ISO-10646
      2. ISO-10646發(fā)布后,遭到了美國計(jì)算機(jī)公司的反對(duì)。
      3. 1988年,Xerox公司提議制定了新的以16位編碼人統(tǒng)一字符集。并聯(lián)合不Apple,IBM,SUN,Microsoft等公司成立了Unicode技術(shù)委員會(huì)。專門負(fù)責(zé)收集,整理,和編碼。于1991年推出了Unicode1.0
      4. 都是為了字符編碼統(tǒng)一問題,ISO和Unicode協(xié)會(huì)推出了連個(gè)不同人標(biāo)準(zhǔn)。這顯然是不利的。后來雙方開始談判。1991年10月達(dá)成協(xié)議。ISO將Unicode收編。起了個(gè)名BMP

      3. UTF-16

      1. ISO-10646編碼空間足以容納從古自今使用過的文字和字符。但很多文字字符已經(jīng)很少用了。 超過99%的在用文字字符都編入了BMP.因此,絕大部分情況下。
        Unicode雙字節(jié)方式都能滿足需求。而且比雙字節(jié)編碼方式4字節(jié)原始編碼來說,更節(jié)省內(nèi)存和處理時(shí)間 。這也是Unicode流行的原因。
      2. 萬一使用了BMP以這后文字怎么辦? Unicode提出了UTF-16的解決辦法。

      4. UTF-8

      1. 雖然UTF-16解決了上面問題。但當(dāng)時(shí)的計(jì)算機(jī)和網(wǎng)絡(luò)世界還是ASCII的天下。只能處理單字節(jié)數(shù)據(jù)流。UTF-16離開了Unicode環(huán)境后。在傳輸和處理中,都存在問題。
      2. 于是又提出了UTF-8的解決文案,
      3. UTF-8按一定的規(guī)則,將一個(gè)ISO10646或Unicode轉(zhuǎn)換成1至4個(gè)字節(jié)的編碼
      4. 其中ASCII轉(zhuǎn)成單字節(jié)編碼。也就嚴(yán)格兼容了ASCII字符集。
      5. UTF-8的2,3,4字節(jié)用以轉(zhuǎn)換ISO-10646標(biāo)準(zhǔn)的UCS-4原始碼。

      5. 漢字的一些常見字符集

      1. GB2312
      2. GB13000
      3. GBK
      4. GB18030

      什么是SQL

      1. SQL是Structured Quevy Language(結(jié)構(gòu)化查詢語言)的縮寫。
      2. SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言。
      3. 在使用它時(shí),只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的。

      sql功能分類

      1. DDL:數(shù)據(jù)定義語言

      用來定義數(shù)據(jù)庫對(duì)象:創(chuàng)建庫,表,列等。

      2. DML:數(shù)據(jù)操作語言

      用來操作數(shù)據(jù)庫表中的記錄

      3. DQL:數(shù)據(jù)查詢語言

      用來查詢數(shù)據(jù)

      4. DCL:數(shù)據(jù)控制語言

      用來定義訪問權(quán)限和安全級(jí)別

      SQL數(shù)據(jù)類型

      MySQL中定義數(shù)據(jù)字段的類型對(duì)你數(shù)據(jù)庫的優(yōu)化是非常重要的。
      MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)值數(shù)據(jù)類型。

      MySQL支持多種類型,大致可以分為三類:

      1. 數(shù)值類型

      在這里插入圖片描述

      2. 字符串類型

      在這里插入圖片描述

      3. 日期和時(shí)間類型

      在這里插入圖片描述

      常用數(shù)據(jù)類型

      1. double:浮點(diǎn)型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;
      2. char:固定長度字符串類型; char(10) 'abc '
      3. varchar:可變長度字符串類型;varchar(10) 'abc'
      4. text:字符串類型;
      5. blob:二進(jìn)制類型;
      6. date:日期類型,格式為:yyyy-MM-dd;
      7. time:時(shí)間類型,格式為:hh:mm:ss
      8. datetime:日期時(shí)間類型 yyyy-MM-dd hh:mm:ss

      在mysql中,字符串類型和日期類型都要用單引號(hào)括起來。'Joker' '2020-01-01'

      SQL語句

      使用Navicate圖形化界面工具
      連接數(shù)據(jù)庫:
      在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述

      DDL:數(shù)據(jù)定義語言

      1. 創(chuàng)建數(shù)據(jù)庫

      create database 數(shù)據(jù)庫名  character set utf8;
      

      在這里插入圖片描述

      2. 創(chuàng)建學(xué)生表

      在這里插入圖片描述

      use joker;
      create table student( -- 創(chuàng)建數(shù)據(jù)表
      Id bigint,
      name varchar(20),
      age int
      );
      

      在這里插入圖片描述
      在這里插入圖片描述

      3. 添加一列

      在這里插入圖片描述

      ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型;
      

      4. 查看表的字段信息

      在這里插入圖片描述

      DESC 表名;
      

      5. 修改一個(gè)表的字段類型

      在這里插入圖片描述

      ALTER TABLE 表名 MODIFY 字段名  數(shù)據(jù)類型;
      

      6. 刪除一列

      在這里插入圖片描述

      ALTER TABLE 表名 DROP 字段名;
      

      7. 修改表名

      在這里插入圖片描述

      RENAME TABLE 原始表名 TO  要修改的表名; 
      

      8. 查看表的創(chuàng)建細(xì)節(jié)

      在這里插入圖片描述

      SHOW CREATE TABLE 表名;
      

      9. 修改表的列名

      在這里插入圖片描述

      ALTER TABLE 表名 CHANGE 原始列名 新列名 數(shù)據(jù)類型;
      

      10. 刪除表

      在這里插入圖片描述

      DROP TABLE 表名;
      

      1. 修改表的字符集為gbk

      在這里插入圖片描述

      ALTER TABLE 表名 CHARACTER SET 字符集名稱;
      

      DML:數(shù)據(jù)操作語言

      1. 查詢表中的所有數(shù)據(jù)

      在這里插入圖片描述

      SELECT * FROM 表名;
      

      2. 插入操作

      在這里插入圖片描述

      INSERT INTO 表名(列名1,列名2 ...)VALUE (列值1,列值2...);
      

      注意事項(xiàng):

      1. 列名與列值的類型、個(gè)數(shù)、順序要一一對(duì)應(yīng)。
      2. 值不要超出列定義的長度。
      3. 插入的日期和字符一樣,都使用引號(hào)括起來。

      批量插入
      在這里插入圖片描述

      INSERT INTO 表名(列名1,列名2 ...)VALUES (列值1,列值2...),(列值1,列值2...);
      

      3. 更新操作

      UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
      
      1. 把所有學(xué)生的年齡改為20
        在這里插入圖片描述
      update students set age=20
      
      1. 把姓名為小鍵的年齡改為18
        在這里插入圖片描述
      update students set age=18 where name='小鍵';
      
      1. 把小吳的年齡在原來基礎(chǔ)上加1歲
        在這里插入圖片描述
      update students set age=age+1 where name='小吳';
      
      1. 修改數(shù)據(jù)庫密碼
        mysql8之前:
      use mysql;
      update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
      flush privileges;刷新MySQL的系統(tǒng)權(quán)限相關(guān)表
      

      mysql8:

      ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
      

      使用mysqladmin修改密碼:

      mysqladmin -u root -p password 123456
      

      4. 刪除操作

      1. 刪除表
      DELETE FROM 表名 【W(wǎng)HERE 列名=值】
      
      TRUNCATE TABLE 表名;
      

      DELETED 與TRUNCATE的區(qū)別

      1. DELETE 刪除表中的數(shù)據(jù),表結(jié)構(gòu)還在;刪除后的數(shù)據(jù)可以找回
      2. TRUNCATE 刪除是把表直接DROP掉,然后再創(chuàng)建一個(gè)同樣的新表。
        刪除的數(shù)據(jù)不能找回。執(zhí)行速度比DELETE快。

      DQL:數(shù)據(jù)查詢語言

      1. 查詢所有列

      SELECT * FROM 表名;
      

      2. 結(jié)果集

      數(shù)據(jù)庫執(zhí)行DQL語句不會(huì)對(duì)數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端。
      結(jié)果集:

      1. 通過查詢語句查詢出來的數(shù)據(jù)以表的形式展示我們稱這個(gè)表為虛擬結(jié)果集。存放在內(nèi)存中。
      2. 查詢返回的結(jié)果集是一張?zhí)摂M表。

      3. 查詢指定列的數(shù)據(jù)

      SELECT 列名1,列表2... FROM 表名;
      

      4. 條件查詢

      條件查詢就是在查詢時(shí)給出WHERE子句,在WHERE子句中可以使用一些運(yùn)算符及關(guān)鍵字:

      1. =(等于)、!=(不等于)、<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于);
      2. BETWEEN…AND;值在什么范圍
      3. IN(set);固定的范圍值
      4. IS NULL;(為空) IS NOT NULL(不為空)
      5. AND;與
      6. OR;或
      7. NOT; 非
      1. 查詢性別為男,并且年齡為20的學(xué)生記錄
      SELECT * FROM students WHERE gender='男' AND age=20;
      
      1. 查詢學(xué)號(hào)為1001 或者 名為zs的記錄
      SELECT * FROM students WHERE id ='1001' OR name='zs';
      
      1. 查詢學(xué)號(hào)為1001,1002,1003的記錄
      SELECT * FROM students WHERE id='1001' OR id='1002' OR 1001='1003';
      
      SELECT * FROM students WHERE id  IN('1001','1002','1003');
      
      1. 查詢年齡為null的記錄
      SELECT * FROM students WHERE age IS NULL;
      
      1. 查詢年齡在18到20之間的學(xué)生記錄
      SELECT * FROM students WHERE age>=18 AND age<=20;
      
      SELECT * FROM students WHERE age BETWEEN 18 AND 20;
      
      1. 查詢性別非男的學(xué)生記錄
      SELECT * FROM students WHERE gender !='男';
      
      1. 查詢姓名不為null的學(xué)生記錄
      SELECT * FROM students WHERE  name IS NOT  NULL;
      

      5. 模糊查詢

      根據(jù)指定的關(guān)鍵進(jìn)行查詢, 使用LIKE關(guān)鍵字后跟通配符
      通配符:

      _ :任意一個(gè)字符
      %:任意0~n個(gè)字符

      1. 查詢姓名由5個(gè)字母構(gòu)成的學(xué)生記錄
      SELECT * FROM students WHERE name LIKE '_____';
      -- 模糊查詢必須使用LIKE關(guān)鍵字。其中 “_”匹配任意一個(gè)字母,5個(gè)“_”表示5個(gè)任意字母。
      
      1. 查詢姓名由5個(gè)字母構(gòu)成,并且第5個(gè)字母為“s”的學(xué)生記錄
      SELECT * FROM students WHERE name LIKE '____s';
      
      1. 查詢姓名以“m”開頭的學(xué)生記錄
      SELECT * FROM students WHERE name LIKE 'm%';
      -- 其中“%”匹配0~n個(gè)任何字母。
      
      1. 查詢姓名中第2個(gè)字母為“u”的學(xué)生記錄
      SELECT * FROM students WHERE name LIKE '_u%';
      
      1. 查詢姓名中包含“s”字母的學(xué)生記錄
      SELECT * FROM stu WHERE name LIKE '%s%';
      

      6. 字段控制查詢

      1. 去除重復(fù)記錄
      SELECT DISTINCT name FROM students;
      
      1. 把查詢字段的結(jié)果進(jìn)行運(yùn)算,必須都要是數(shù)據(jù)型
      SELECT *,字段1+字段2 FROM 表名;
      

      列有很多記錄的值為NULL,
      因?yàn)槿魏螙|西與NULL相加結(jié)果還是NULL,所以結(jié)算結(jié)果可能會(huì)出現(xiàn)NULL。
      下面使用了把NULL轉(zhuǎn)換成數(shù)值0的函數(shù)IFNULL:

      SELECT *,age+IFNULL(score,0) FROM students;
      
      1. 對(duì)查詢結(jié)果起別名

      在上面查詢中出現(xiàn)列名為sx+IFNULL(yw,0),這很不美觀,現(xiàn)在我們給這一列給出一個(gè)別名,為total:

      SELECT *, yw+IFNULL(sx,0) AS total FROM score;
      
      SELECT *, yw+IFNULL(sx,0)  total FROM score; -- 省略 AS
      

      7. 排序

      創(chuàng)建表:

      CREATE TABLE `employee` (
        `id` int(11) NOT NULL,
        `name` varchar(50) DEFAULT NULL,
        `gender` varchar(1) DEFAULT NULL,
        `hire_date` date DEFAULT NULL,
        `salary` decimal(10,0) DEFAULT NULL,
        `performance` double(255,0) DEFAULT NULL,
        `manage` double(255,0) DEFAULT NULL,
        `department` varchar(255) DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      INSERT INTO `employee` VALUES (1001, '張三', '男', '1991-7-25', 2000, 200, 500, '營銷部');
      INSERT INTO `employee` VALUES (1002, '李四', '男', '2017-7-5', 4000, 500, NULL, '營銷部');
      INSERT INTO `employee` VALUES (1003, '王五', '女', '2018-5-1', 6000, 100, 5000, '研發(fā)部');
      INSERT INTO `employee` VALUES (1004, '趙六', '男', '1991-6-1', 1000, 3000, 4000, '財(cái)務(wù)部');
      INSERT INTO `employee` VALUES (1005, '孫七', '女', '2018-3-23', 8000, 1000, NULL, '研發(fā)部');
      INSERT INTO `employee` VALUES (1006, '周八', '男', '2010-9-8', 5000, 500, 1000, '人事部');
      INSERT INTO `employee` VALUES (1007, '吳九', '女', '2017-7-5', 8000, 601, NULL, '研發(fā)部');
      INSERT INTO `employee` VALUES (1008, '鄭十', '女', '2014-4-6', 4000, 1801, NULL, '人事部');
      
      
      

      在這里插入圖片描述

      對(duì)查詢的結(jié)果進(jìn)行排序
      使用關(guān)鍵字ORDER BY
      排序類型

      1. 升序ASC 從小到大 默認(rèn)
      2. 降序DESC 從大到小
      1. 對(duì)所有員工的薪水進(jìn)行排序
      SELECT *FROM employee ORDER BY salary ASC;
      
      1. 查詢所有雇員,按月薪降序排序,如果月薪相同時(shí),按編號(hào)升序排序
      SELECT * FROM employee ORDER BY salary DESC, id ASC;
      

      8.聚合函數(shù)

      對(duì)查詢的結(jié)果進(jìn)行統(tǒng)計(jì)計(jì)算
      常用聚合函數(shù):

      1. COUNT():統(tǒng)計(jì)指定列不為NULL的記錄行數(shù);
      2. MAX():計(jì)算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;
      3. MIN():計(jì)算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;
      4. SUM():計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;
      5. AVG():計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;

      1. COUNT

      1. 查詢employee表中記錄數(shù):
      SELECT COUNT(*) AS total_record FROM employee;
      
      1. 查詢員工表中有績效的人數(shù)
      SELECT COUNT(performance)  FROM employee;
      
      1. 查詢員工表中月薪大于2500的人數(shù):
      SELECT COUNT(*) FROM employee WHERE salary > 2500;
      
      1. 統(tǒng)計(jì)月薪與績效之和大于5000元的人數(shù):
      SELECT COUNT(*)  FROM employee WHERE salary+IFNULL(performance,0) > 5000;
      
      1. 查詢有績效的人數(shù),和有管理費(fèi)的人數(shù):
      SELECT COUNT(performance), COUNT(manage) FROM employee;
      

      2. SUM和AVG

      1. 查詢所有雇員月薪和:
      SELECT SUM(salary) FROM employee;
      
      1. 查詢所有雇員月薪和,以及所有雇員績效和
      SELECT SUM(salary), SUM(performance) FROM employee;
      
      1. 查詢所有雇員月薪+績效和:
      SELECT SUM(salary+IFNULL(performance,0)) FROM employee;
      
      1. 統(tǒng)計(jì)所有員工平均工資:
      SELECT AVG(salary) FROM employee;
      

      3. MAX和MIN

      查詢最高工資和最低工資:

      SELECT MAX(salary), MIN(salary) FROM employee;
      

      9. 分組查詢

      什么是分組查詢

      將查詢結(jié)果按照1個(gè)或多個(gè)字段進(jìn)行分組,字段值相同的為一組

      分組使用

      SELECT gender from employee GROUP BY gender;
      

      根據(jù)gender字段來分組,gender字段的全部值只有兩個(gè)('男'和'女'),所以分為了兩組 當(dāng)group by單獨(dú)使用時(shí),只顯示出每組的第一條記錄 所以group by單獨(dú)使用時(shí)的實(shí)際意義不大

      1. group by + group_concat()

      group_concat(字段名)可以作為一個(gè)輸出字段來使用
      表示分組之后,根據(jù)分組結(jié)果,使用group_concat()來放置每一組的某字段的值的集合

      SELECT gender,GROUP_CONCAT(name) from employee GROUP BY gender;
      
      1. group by + 聚合函數(shù)

      通過group_concat()的啟發(fā),我們既然可以統(tǒng)計(jì)出每個(gè)分組的某字段的值的集合,那么我們也可以通過集合函數(shù)來對(duì)這個(gè)"值的集合"做一些操作

      查詢每個(gè)部門的部門名稱和每個(gè)部門的工資和

      SELECT department,SUM(salary) FROM employee GROUP BY department;
      

      查詢每個(gè)部門的部門名稱以及每個(gè)部門的人數(shù)

      SELECT department,COUNT(*) FROM employee GROUP BY department;
      

      查詢每個(gè)部門的部門名稱以及每個(gè)部門工資大于1500的人數(shù)

      SELECT department,COUNT(salary) FROM employee WHERE salary > 1500 GROUP BY department;
      
      1. group by + having

      用來分組查詢后指定一些條件來輸出查詢結(jié)果
      having作用和where一樣,但having只能用于group by

      查詢工資總和大于9000的部門名稱以及工資和

      SELECT department,GROUP_CONCAT(salary) FROM employee GROUP BY department;
      	
      SELECT department,SUM(salary) FROM employee GROUP BY department;
      	
      

      總和大于9000

      SELECT department,SUM(salary) FROM employee GROUP BY department HAVING SUM(salary)>9000;
      		
      
      1. having與where的區(qū)別

      having是在分組后對(duì)數(shù)據(jù)進(jìn)行過濾.
      where是在分組前對(duì)數(shù)據(jù)進(jìn)行過濾
      having后面可以使用分組函數(shù)(統(tǒng)計(jì)函數(shù))
      where后面不可以使用分組函數(shù)
      WHERE是對(duì)分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會(huì)參加分組;而HAVING是對(duì)分組后數(shù)據(jù)的約束。

      查詢工資大于2000的,工資總和大于6000的部門名稱以及工資和

      1. 查詢工資大于2000的
      SELECT * FROM employee WHERE salary >2000;	
      
      1. 各部門工資
      SELECT department, GROUP_CONCAT(salary) FROM employee WHERE salary >2000 GROUP BY department;
      
      1. 各部門工資總和
      SELECT department, SUM(salary) FROM employee WHERE salary >2000 GROUP BY department;
      
      1. 各部門工資總和大于6000
      SELECT department, SUM(salary) FROM employee WHERE salary >2000 GROUP BY department HAVING SUM(salary)>6000;
      
      1. 各部門工資總和大于6000降序排列
      SELECT department, SUM(salary) FROM employee 
      WHERE salary >2000 
      GROUP BY department 
      HAVING SUM(salary)>6000 
      ORDER BY SUM(salary) DESC;
      	
      

      10. LIMIT

      從哪一行開始查,總共要查幾行
      Limit 參數(shù)1,參數(shù)2

      1. 參數(shù)1:從哪一行開始查
      2. 參數(shù)2:一共要查幾行

      角標(biāo)是從0開始

      格式:

      select * from 表名 limit 0,3;
      

      11. 書寫順序

      1. 書寫順序
        在這里插入圖片描述
      2. 執(zhí)行順序
        在這里插入圖片描述

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多