Mysql學習第三天

来源:https://www.cnblogs.com/java0619/archive/2018/01/29/8375892.html
-Advertisement-
Play Games

1、對錶中數據的增刪改(DML) create table t_user( id int primary key auto_increment, name varchar(20) not null, email varchar(20) unique ) 為表添加記錄 (必須掌握) insert in ...


1、對錶中數據的增刪改(DML)
      create table t_user(
      id int primary key auto_increment,
      name varchar(20) not null,
      email varchar(20) unique
     )

為表添加記錄 (必須掌握)

insert into 表名[(列名1,列名2...)] values (值1,值2...);
1.插入一條數據

   1.1指定要插入那些列
       insert into t_user(name,email) values('tom','[email protected]');
****註意: 數據類型為字元串類型的.需要使用單引號包裹.
    1.2不指定插入哪些列, 需要指定每一列的值
        insert into t_user values(null,'jerry','[email protected]');
        insert into t_user(name,email) values('湯姆','[email protected]');
=====================================================================================
SHOW VARIABLES LIKE '%character%'; ==> 查看字元編碼配置

      | character_set_client | gbk 客戶端的編碼 ***
      |
      | character_set_results | gbk 結果集的編碼 ***
      |
      | character_set_connection | utf8 客戶端連接的編碼
      |
      | character_set_database | utf8 資料庫預設使用的編碼
      |
      | character_set_filesystem | BINARY 文件系統存放時使用的編碼

      |
      | character_set_server | utf8 伺服器編碼 安裝時指定的
      |
      | character_set_system | utf8 內部系統編碼
  結論: 如果使用cmd 命令控制台操作 資料庫,
  註意character_set_client 和 character_set_results 需要設置成GBK, 因為我們的命令控制航使用gbk碼表顯示中文.
  使用如下命令設置:
  方式:
      set character_set_client=gbk
      set character_set_results=gbk
 註意:
    每次重新連接資料庫都要重新設置.
    如果使用的cmd視窗操作資料庫. 就修改如下的碼表為gbk(cmd視窗使用的是gbk碼表).
    這種做法影響的範圍只在你當前鏈接中.
2、修改一條記錄 (必須掌握)

update 表名 set 列名1 = 值 , 列名2 = 值 ....[where 條件1,條件2...]
     create table t_user(
     id int primary key auto_increment,
     name varchar(20) not null,
     email varchar(20) unique
     )
2.1、修改表中id為3 的記錄, 將name修改為rose;

update t_user set name='rose' where id=3;
update t_user set name='rose';
//-----------------------------------------------------------------------------------------------------
      CREATE TABLE employee (
      id INT,
      NAME VARCHAR(20),
      gender VARCHAR(20),
      birthday DATE,
      entry_date DATE,
      job VARCHAR(30),
      salary DOUBLE,
      RESUME LONGTEXT
      );
      INSERT INTO employee VALUES(1,'zs','male','1980-12-12','2000-12-12','coder',4000,NULL);
      INSERT INTO employee VALUES(2,'ls','male','1983-10-01','2010-12-12','master',7000,NULL);
      INSERT INTO employee VALUES(3,'ww','female','1985-03-08','2008-08-08','teacher',2000,NULL);
      INSERT INTO employee VALUES(4,'wu','male','1986-05-13','2012-12-22','hr',3000,NULL);
-- 要求
-- 將所有員工薪水修改為5000元。
-- 將姓名為’zs’的員工薪水修改為3000元。
-- 將姓名為’ls’的員工薪水修改為4000元,job改為ccc。

-- 將wu的薪水在原有基礎上增加1000元。
3、刪除記錄語句 (必須掌握)
DELETE FROM 表名 [WHERE 條件];
3.1、 刪除表中名稱為’rose’的記錄。
DELETE FROM employee WHERE NAME='rose';
3.2、 刪除表中所有記錄。
DELETE FROM employee ;
3.3、使用truncate刪除表中記錄。
TRUNCATE TABLE employee;
DELETE 刪除 和 TRUNCATE刪除(瞭解) 兩者有什麼區別?
首先,這兩種都是刪除表中的記錄.

不同的是:
1、 delete 是逐行標記刪除. TRUNCATE 是將整張表包括表結構都移除,然後將表重新創建.
2、 delete DML語句。 TRUNCATE DDL語句。
3、delete 刪除的記錄可以被恢復,TRUNCATE 不能回覆。
4.、delete 不釋放空間,TRUNCATE 釋放空間.
5、 TRUNCATE 會提交事務. (還沒學)

//-------------------------以上就是 增加 修改 刪除 表記錄 相關語句 ,(DML)-----------------------------------------------------------
DQL語句(DML) 查詢語句. (必須掌握)

語法:
      SELECT selection_list /*要查詢的列名稱*/
      FROM table_list /*要查詢的表名稱*/
      WHERE condition /*行條件*/
      GROUP BY grouping_columns /*對結果分組*/
      HAVING condition /*分組後的行條件*/
      ORDER BY sorting_columns /*對結果排序*/
       LIMIT offset_start, row_count /*結果限定*/
//---------------------------------------------------------------------------------------
      CREATE TABLE stu ( --學生表
      sid CHAR(6), -- 學生編號
      sname VARCHAR(50), -- 學生姓名
      age INT, -- 年齡
     gender VARCHAR(50) -- 性別
      );
      INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
      INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
      INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
      INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
      INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
      INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
      INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
      INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
      INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
      INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
      INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
//---------------------------------------------------------------
      CREATE TABLE emp( -- 員工表
      empno INT, -- 員工編號
      ename VARCHAR(50), -- 員工姓名
      job VARCHAR(50), -- 工作
      mgr INT, -- 員工上司的編號
      hiredate DATE, -- 入職日期
      sal DECIMAL(7,2), -- 工資
      comm DECIMAL(7,2), -- 獎金
      deptno INT -- 部門編號
);
      INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
      INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
      INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
      INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
      INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
      INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
      INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
      INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
      INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
      INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
      INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
      INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
      INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
      INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
1.1 查詢所有行所有列
select * from stu;
*號 是通配符.通配所有列. 上面語句與下麵是一模一樣的
select sid,sname,age,gender from stu;
誰的效率更高?
下麵的效率更高. *需要運算.
1.2 查詢所有行指定列
select sname from stu;
2.1 條件查詢介紹
條件查詢就是在查詢時給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:
? =、!=、<>、<、<=、>、>=;
? BETWEEN…AND;
? IN(SET);
? IS NULL;
//---條件連接符
? AND; &&
? OR; ||
? NOT; !
2.2 查詢性別為女,並且年齡小於50的記錄
select * from stu where gender='female' and age<50;
2.3 查詢學號為S_1001,或者姓名為liSi的記錄
select * from stu where sid='S_1001' or sname='liSi';
資料庫中,sql語句不區分大小寫 ,但是 數據區分大小寫.
2.4 查詢學號為S_1001,S_1002,S_1003的記錄
select * from stu where sid='S_1001' or sid='S_1002' or sid='S_1003';
select * from stu where sid in('S_1001','S_1002','S_1003');
2.5 查詢學號不是S_1001,S_1002,S_1003的記錄
select * from stu where not (sid='S_1001' or sid='S_1002' or sid='S_1003');
select * from stu where sid not in('S_1001','S_1002','S_1003');
2.6 查詢年齡為null的記錄
select * from stu where age=null;
null的特性: null不等於null 所以判斷時應如下寫法:
select * from stu where age is null;
2.7 查詢年齡在20到40之間的學生記錄
select * from stu where age >= 20 and age <= 40;
select * from stu where age between 20 and 40;
2.8查詢性別非男的學生記錄
select * from stu where gender!= 'male';
select * from stu where not gender='male';
select * from stu where gender not in ('male');
2.9 查詢姓名不為null的學生記錄
select * from stu where sname is not null;
select * from stu where not sname is null;
//--------------------------------------------------------------------------------------------------
where 欄位 like '表達式';
% => 通配 通配任意個字元.
_ => 通配 通配單個字元.
說明: LIKE 條件後 根模糊查詢表達式, "_"==> 代表一個任意字元
3.1查詢姓名由5個字母構成的學生記錄
select * from stu where sname like '_____';
3.2查詢姓名由5個字母構成,並且第5個字母為“i”的學生記錄
select * from stu where sname like '____i';
3.3 查詢姓名以“z”開頭的學生記錄
說明: "%"該通配符匹配任意長度的字元.
select * from stu where sname like 'z%';
3.4查詢姓名中第2個字母為“i”的學生記錄
select * from stu where sname like '_i%';
3.5 查詢姓名中包含“a”字母的學生記錄
select * from stu where sname like '%a%';
//-----------------------------------------------------------------
4.1 去除重覆記錄
關鍵詞: distinct => 去除重覆查詢結果記錄.
select gender from stu; ==> 出現大量重覆的記錄
select distinct gender from stu; =>去除重覆的記錄
4.2查看雇員的月薪與佣金之和
select sal*12+comm from emp;
null與任何數字計算結果都是null.上面的寫法是錯誤的.
使用IFNULL(參數1,參數2) 函數解決. 判斷參數1的值是否為null,如果為null返回參數2的值.
select sal*12 + IFNULL(comm,0) from emp;
*這個函數在所有資料庫通用嗎?
不通用.
4.3 給列名添加別名
select sal*12 + IFNULL(comm,0) as '年收入' from emp;
** select sal*12 + IFNULL(comm,0) '年收入' from emp;
select sal*12 + IFNULL(comm,0) 年收入 from emp;
//------------------------------------------------------------------------------------------------------------------------------
5.1 查詢所有學生記錄,按年齡升序排序
asc: 升序
desc:降序
select * from stu order by age asc;
預設就是升序
select * from stu order by age;
5.2 查詢所有學生記錄,按年齡降序排序
select * from stu order by age desc;
5.3 查詢所有雇員,按月薪降序排序,如果月薪相同時,按編號升序排序
select * from emp order by sal desc , empno asc;
聚合函數
聚合函數是用來做縱向運算的函數:
? COUNT():統計指定列不為NULL的記錄行數;
? MAX():計算指定列的最大值,如果指定列是字元串類型,那麼使用字元串排序運算;
? MIN():計算指定列的最小值,如果指定列是字元串類型,那麼使用字元串排序運算;
? SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果為0;
? AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果為0;
6.1 COUNT
當需要縱向統計時可以使用COUNT()。
? 1>查詢emp表中記錄數:
select count(*) from emp;
2>查詢emp表中有佣金的人數:
select count(*) from emp where comm is not null and comm >0;
3>查詢emp表中月薪大於2500的人數:
select count(*) from emp where sal > 2500;
4>統計月薪與佣金之和大於2500元的人數:
select count(*) from emp where sal+IFNULL(comm,0) > 2500;
5>查詢有佣金的人數並且有領導的人數:
select count(*) from emp where comm > 0 and mgr is not null;
6.2 SUM(計算總和)和AVG(計算平均值)
當需要縱向求和時使用sum()函數。
1>查詢所有雇員月薪和:
select sum(sal) from emp;
2>查詢所有雇員月薪和,以及所有雇員佣金和:
select sum(sal),sum(comm) from emp;
3>查詢所有雇員月薪+佣金和:
select sum(sal+IFNULL(comm,0)) from emp;
4>統計所有員工平均工資:
select avg(sal) from emp;
6.3 MAX和MIN
? 查詢最高工資和最低工資:
select max(sal),min(sal) from emp;
//---------------------------------------------------------------------------------------------------------------------------------------
分組查詢
當需要分組查詢時需要使用GROUP BY子句,例如查詢每個部門的工資和,這說明要使用部分來分組。
? 1>查詢每個部門的部門編號和每個部門的工資和:
select deptno,sum(sal) from emp group by deptno;
2>查詢每個部門的部門編號以及每個部門的人數:
select deptno,count(ename) from emp group by deptno;
3>查詢每個部門的部門編號以及每個部門工資大於1500的人數:
select deptno,count(ename) from emp where sal>1500 group by deptno ;
HAVING子句
4>查詢工資總和大於9000的部門編號以及工資和:
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
使用having在分組之後加條件.
where和having都可以加條件?
1.where在分組之前加條件.
2.having在分組之後加條件.
where的效率要遠遠高於having. 分組本身消耗資源非常大.
//----------------------------------------------以下是分頁相關知識---------------------------------------------------------------------------------------
LIMIT(MySQL方言) (必須掌握)
LIMIT用來限定查詢結果的起始行,以及總行數。
1>查詢5行記錄,起始行從0開始
select * from emp limit 0,5;
2> 查詢10行記錄,起始行從3開始
select * from emp limit 3,10;
3>如果一頁記錄為5條,希望查看第3頁記錄應該怎麼查呢?
? 第一頁記錄起始行為0,一共查詢5行;
select * from emp limit 0,5;
? 第二頁記錄起始行為5,一共查詢5行;
select * from emp limit 5,5;
? 第三頁記錄起始行為10,一共查詢5行;
select * from emp limit 10,5;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、下載I2C-tools工具: 最近在移植i2c-tools工具,下載地址:https://i2c.wiki.kernel.org/index.php/I2C_Tools;百度到了wiki中的git地址; 二、將git下載到external目錄下,編寫Android.mk,將其打包system.i ...
  • # 抓取內容:商品名稱,商品價格,商品鏈接,店鋪名稱,店鋪鏈接 # 爬取的時候之前返回了多次302,301 但是html網頁還是被爬取下來了 抓取的首頁: start_urls = ['https://list.tmall.com/search_product.htm?spm=a220m.10008 ...
  • 1月——華清遠見成都中心——胡昆——嵌入式學科——數模轉換晶元PCF8591 一.AD轉換的概念 AD轉換的功能是把模擬量電壓轉換為數字量電壓。DA轉換的功能正好相反,就是講數字量轉換位模擬量。 二.晶元PCF8591介紹 PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取 ...
  • 2、mkdir hadoop fs -mkdir 3、df du [hadoop@h201 hadoop-2.6.0-cdh5.5.2]$ hadoop fs -df /18/01/28 22:49:51 WARN util.NativeCodeLoader: Unable to load nati ...
  • date類型是oracle中存儲日期類的一種常用類型,其處理也是在資料庫使用中比較多需要註意的地方。如我們可以使用to_char函數將其轉化為任意時間格式的字元串,也可使用to_date函數轉化相應的字元串為日期格式。 本篇主要介紹這樣一種使用情況。 問題描述:欄位保存為帶有時分秒格式的日期形式,現 ...
  • 1.複製表結構及數據到新表 CREATE TABLE 新表 SELECT * FROM 舊表 2.只複製表結構到新表 CREATE TABLE 新表 SELECT * FROM 舊表 WHERE 1=2 即:讓WHERE條件不成立. 方法二:(由tianshibao提供) CREATE TABLE  ...
  • 聚合函數是對一組值執行計算並返回單一的值的函數,它經常與SELECT語句的GROUP BY子句一同使用,SQL SERVER 中具體的聚合函數如下:1. AVG 返回指定組中的平均值,空值被忽略。 例:select prd_no,avg(qty) from sales group by prd_no ...
  • 一、列表解析式 列表解析是外面一對中括弧,它返回的是列表。 一般形式為:[expr for item in itratoble] filter()方法接受一個函數和一個可迭代對象兩個參數,返回一個生成器對象。 map()方法接受一個函數和一個可迭代對象兩個參數,返回一個列表。 列表解析式的執行速度比 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...