<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • sqlserver增刪改查語句(教你sqlserver數據庫增刪改查)


    數據庫基本操作

    update user set password=password('123456')where user='root'; 修改密碼
    flush privileges; 刷新數據庫
    show databases; 顯示所有數據庫
    use dbname; 打開某個數據庫
    show tables; 顯示數據庫mysql中所有的表
    describe user; 顯示表mysql數據庫中user表的列信息
    create database name; 創建數據庫
    use databasename; 選擇數據庫
    exit; 退出Mysql
    ? 命令關鍵詞 : 尋求幫助
    -- 表示注釋
    
    

    創建數據庫:

    CREATE DATABASE 數據庫名    //創建數據庫
    
    

    刪除數據庫 :

    drop database [if exists] 數據庫名;
    
    

    查看數據庫 :

    show databases;
    
    

    使用數據庫 :

    use 數據庫名;
    
    

    表的操作

    偽代碼:

    create table [if not exists] `表名`(
        '字段名1' 列類型 [屬性][索引][注釋],
        '字段名2' 列類型 [屬性][索引][注釋],
        '字段名n' 列類型 [屬性][索引][注釋]
    )[表類型][表字符集][注釋]
    
    

    實例:

    -- 創建外鍵的方式一 : 創建子表同時創建外鍵
    -- 年級表 (id\年級名稱)
    CREATE TABLE `grade` (
        `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級ID',
        `gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
        PRIMARY KEY (`gradeid`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    -- 學生信息表 (學號,姓名,性別,年級,手機,地址,出生日期,郵箱,身份證號)
    CREATE TABLE `Student` (
        `Sno` INT(4) NOT NULL COMMENT '學號',
        `Sname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
        `Ssex` TINYINT(1) DEFAULT '1' COMMENT '性別',
        `gradeid` INT(10) DEFAULT NULL COMMENT '年級',
        `phoneNum` VARCHAR(50) NOT NULL COMMENT '手機',
        `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
        `borndate` DATETIME DEFAULT NULL COMMENT '生日',
        `email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
        `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份證號',
        PRIMARY KEY (`studentno`),
        KEY `FK_gradeid` (`gradeid`),
        CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`
        (`gradeid`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    
    

    主鍵:

    PRIMARY KEY (`字段名`)
    
    

    外鍵:

    KEY FK_ `字段名` (`字段名`)
    
    

    外鍵約束:給外鍵字段添加約束執行引用另外一張表的同一個字段名

    CONSTRAINT `FK_字段名` FOREIGN KEY (`字段名`) REFERENCES `另外一張表名` (`另外一張表字段名`)
    
    

    設置非空:

    NOT NULL
    
    

    自增:

    AUTO_INCREMENT
    
    

    備注:

    COMMENT `備注信息`
    
    

    默認值:

    DEFAULT '默認值'
    
    

    設置索引:

    ENGINE=InnoD
    
    

    設置默認字符編碼 :

    DEFAULT CHARSET=utf8
    
    

    修改表名 :

    ALTER TABLE 舊表名 RENAME AS 新表名
    
    

    添加字段 :

    ALTER TABLE 表名 ADD字段名 列屬性[屬性]
    
    

    修改字段 :

    ALTER TABLE 表名 MODIFY 字段名 列類型[屬性]
    ALTER TABLE 表名 CHANGE 舊字段名 新字段名 列屬性[屬性]
    
    

    刪除字段 :

    ALTER TABLE 表名 DROP 字段名
    
    

    刪除表語法:

    DROP TABLE [IF EXISTS] 表名
    
    

    添加數據

    INSERT命令

    語法:

     INSERT
     INTO <表名>[(<字段1>,<字段2>,<字段3>,...)]
     VALUES('值1','值2','值3')
    
    

    實例一:

    INSERT
    INTO Student(Sno,Sname,Ssex,Sdept,Sage)
    VALUES(1001,'張三','男','信息工程',18)
    
    

    實例二:

    INSERT
    INTO Student(Sno,Sname,Ssex,Sdept,Sage)
    VALUES(1001,'張三','男','信息工程',18),(1002,'李四','男','信息工程',19)
    
    

    刪除數據

    DELETE命令

    TRUNCATE命令

    作用:用于完全清空表數據 , 但表結構 , 索引 , 約束等不變 ;

    語法:

    DELETE
    FROM <表名>
    [WHERE <條件>];
    
    

    實例:

    DELETE
    FROM Student
    WHERE Sno = 10001;
    
    

    修改數據

    update命令

    語法:

    UPDATE <表名>
    SET <列名>=<表達式> [, <列名>=<表達式>,]...
    [WHERE <條件>];
    
    

    實例一:

    UPDATE Student
    SET Sdept = `計算機`,Sage = 23
    WHERE Sno = 1001
    
    

    實例二:多條件

    UPDATE Student
    SET Sdept = `計算機`,Sage = 23
    WHERE Sname = `張三` and Ssex = `男`
    
    

    where條件語句:

    運算符含義用法
    =等于Sage = 18
    <> 或 !=不等于Sage != 0
    >大于Sage > 1
    <小于Sage < 100
    >=大于或等于Sage >= 1
    <=小于或等于Sage <= 100
    Sage <= 100在某個范圍之間BETWEEN 1 AND 100
    AND并且Sage >0 AND Sage<101
    ORSage > 0 OR Sage < 101

    查詢數據

    select命令

    簡單語法:

    select * from Student --查詢所有學生信息
    
    

    指定字段查詢:

    select Sno,Sname from Student   --查詢學生表的學號和姓名
    
    

    別名:可以給….. 字段起別名;也可以給 ….表起別名

    selcet Sno as 學號,Sname as 名字 from Student
    
    

    函數Concat(<字符串>,<列表名>):拼接字符串

    select CONCAT('姓名:',Sname) from Student --查詢結果 姓名:張三
    
    

    DISTINCT 去重:去除重復數據

    -- # 查看哪些同學參加了考試(學號) 去除重復項
    SELECT * FROM result; -- 查看考試成績
    SELECT studentno FROM result; -- 查看哪些同學參加了考試
    SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重復項 , (默認是ALL)
    
    

    where條件語句

    操作符名稱語法描述
    AND 或 &&a AND b 或 a && b邏輯與,同時為真結果才為真
    ORa OR b邏輯或,只要一個為真,則結果為真
    NOT 或 !NOT a 或 !a邏輯非,若操作數為假,則結果為真!

    實例:

    -- 查詢考試成績在95-100之間的
    SELECT Studentno,StudentResult
    FROM result
    WHERE StudentResult>=95 AND StudentResult<=100;
    
    SELECT Studentno,StudentResult
    FROM result
    WHERE StudentResult BETWEEN 95 AND 100;
    
    -- 除了1000號同學,要其他同學的成績
    SELECT studentno,studentresult
    FROM result
    WHERE studentno!=1000;
    
    -- 使用NOT
    SELECT studentno,studentresult
    FROM result
    WHERE NOT studentno=1000;
    
    

    模糊查詢 : 比較操作符

    操作符名稱操作符名稱描述
    IS NULLa IS NULL若操作符為NULL,則結果為真
    IS NOT NULLa IS NOT NULL若操作符不為NULL,則結果為真
    BETWEENa BETWEEN b AND c若 a 范圍在 b 與 c 之間,則結果為真
    LIKEa LIKE bSQL 模式匹配,若a匹配b,則結果為真
    INa IN (a1,a2,a3,……)) 若 a 等于 a1,a2….. 中的某一個,則結果為真

    實例:

    <spna style=”margin: 0px; padding: 0px; color: rgb(255, 0, 0);”>LIKE的運用</spna>

    -- 查詢姓張的同學的學號及姓名
    -- like結合使用的通配符 : % (代表0到任意個字符) _ (一個字符)
    SELECT Sno,Sname FROM Student
    WHERE Sname LIKE '張%';
    
    -- 查詢姓張的同學,后面只有一個字的
    SELECT Sno,Sname FROM Student
    WHERE studentname LIKE '張_';
    
    -- 查詢姓張的同學,后面只有兩個字的
    SELECT Sno,Sname FROM Student
    WHERE Sname LIKE '張__';
    
    

    IN的運用

    -- 查詢學號為1000,1001,1002的學生姓名
    SELECT Sno,Sname FROM Student
    WHERE Sno IN (1000,1001,1002);
    
    -- 查詢地址在廣州,深圳的學生
    SELECT Sno,Sname,address FROM Student
    WHERE address IN ('廣州','深圳');
    
    

    NULL的運用

    -- 查詢出生日期沒有填寫的同學
    SELECT Sname FROM Student
    WHERE BornDate IS NULL;
    -- 查詢出生日期填寫的同學
    SELECT Sname FROM Student
    WHERE BornDate IS NOT NULL;
    -- 查詢沒有寫家庭住址的同學(空字符串不等于null)
    SELECT Sname FROM Student
    WHERE Address='' OR Address IS NULL;
    
    

    多表查詢

    JOIN連接:

    操作符名稱描述
    INNER JOIN兩個表之間交集
    LEFT JOIN兩個表之間交集,并向左表拼接
    RIGHT JOIN兩個表之間交集,并向右表拼接

    內連接 inner join
    查詢兩個表中的結果集中的交集
    外連接 outer join
    查詢兩個表中的結果集中的并集
    左外連接 left join
    以左表作為基準,右邊表來一一匹配,匹配不上的,返回左表的記錄,右表以NULL填充
    右外連接 right join
    以右表作為基準,左邊表來一一匹配,匹配不上的,返回右表的記錄,左表以NULL填充

    — 查詢參加了考試的同學信息(學號,學生姓名,科目編號,分數)
    –Student表(學號,學生姓名)和result表(學生姓名,科目編號,分數)

    SELECT s.Sno,Sname,subjectno,StudentResult
    FROM Student s
    INNER JOIN result r
    ON r.Sno = s.Sno
    
    
    -- 右連接(也可實現)
    SELECT s.Sno,Sname,subjectno,StudentResult
    FROM student s
    RIGHT JOIN result r
    ON r.Sno = s.Sno
    
    
    -- 等值連接
    SELECT s.Sno,Sname,subjectno,StudentResult
    FROM Student s , result r
    WHERE r.Sno = s.Sno
    
    
    -- 左連接 (查詢了所有同學,不考試的也會查出來)
    SELECT s.Sno,Sname,subjectno,StudentResult
    FROM Student s
    LEFT JOIN result r
    ON r.Sno = s.Sno
    
    
    -- 查一下缺考的同學(左連接應用場景)
    SELECT s.Sno,Sname,subjectno,StudentResult
    FROM Student s
    LEFT JOIN result r
    ON r.Sno = s.Sno
    WHERE StudentResult IS NULL
    
    
    -- 思考題:查詢參加了考試的同學信息(學號,學生姓名,科目名,分數)
    SELECT s.Sno,Sname,Sname,StudentResult
    FROM Student s
    INNER JOIN result r
    ON r.Sno = s.Sno
    INNER JOIN `subject` sub
    ON sub.Sno = r.Sno
    
    

    自連接查詢

    -- 創建一個表
    CREATE TABLE `category` (
    `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主題id',
    `pid` INT(10) NOT NULL COMMENT '父id',
    `categoryName` VARCHAR(50) NOT NULL COMMENT '主題名字',
    PRIMARY KEY (`categoryid`)
    ) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
    
    -- 插入數據
    INSERT INTO `category` (`categoryid`, `pid`, `categoryName`)
    VALUES('2','1','信息技術'),
    ('3','1','軟件開發'),
    ('4','3','數據庫'),
    ('5','1','美術設計'),
    ('6','3','web開發'),
    ('7','5','ps技術'),
    ('8','2','辦公信息');
    
    

    實例操作:

    -- 編寫SQL語句,將欄目的父子關系呈現出來 (父欄目名稱,子欄目名稱)
    -- 核心思想:把一張表看成兩張一模一樣的表,然后將這兩張表連接查詢(自連接)
    SELECT a.categoryName AS '父欄目',b.categoryName AS '子欄目'
    FROM category AS a,category AS b
    WHERE a.`categoryid`=b.`pid`
    
    
    -- 思考題:查詢參加了考試的同學信息(學號,學生姓名,科目名,分數)
    SELECT s.studentno,studentname,subjectname,StudentResult
    FROM student s
    INNER JOIN result r
    ON r.studentno = s.studentno
    INNER JOIN `subject` sub
    ON sub.subjectno = r.subjectno
    
    
    -- 查詢學員及所屬的年級(學號,學生姓名,年級名)
    SELECT studentno AS 學號,studentname AS 學生姓名,gradename AS 年級名稱
    FROM student s
    INNER JOIN grade g
    ON s.`GradeId` = g.`GradeID`
    
    
    -- 查詢科目及所屬的年級(科目名稱,年級名稱)
    SELECT subjectname AS 科目名稱,gradename AS 年級名稱
    FROM SUBJECT sub
    INNER JOIN grade g
    ON sub.gradeid = g.gradeid
    
    
    -- 查詢 數據庫結構-1 的所有考試結果(學號 學生姓名 科目名稱 成績)
    SELECT s.studentno,studentname,subjectname,StudentResult
    FROM student s
    INNER JOIN result r
    ON r.studentno = s.studentno
    INNER JOIN `subject` sub
    ON r.subjectno = sub.subjectno
    WHERE subjectname='數據庫結構-1'
    
    

    子查詢

    什么是子查詢?
    在查詢語句中的WHERE條件子句中,又嵌套了另一個查詢語句
    嵌套查詢可由多個子查詢組成,求解的方式是由里及外;
    子查詢返回的結果一般都是集合,故而建議使用IN關鍵字;

    操作實例:

    -- 查詢 數據庫結構-1 的所有考試結果(學號,科目編號,成績),并且成績降序排列
    -- 方法一:使用連接查詢
    SELECT studentno,r.subjectno,StudentResult
    FROM result r
    INNER JOIN `subject` sub
    ON r.`SubjectNo`=sub.`SubjectNo`
    WHERE subjectname = '數據庫結構-1'
    ORDER BY studentresult DESC;
    
    -- 方法二:使用子查詢(執行順序:由里及外)
    SELECT studentno,subjectno,StudentResult
    FROM result
    WHERE subjectno=(
        SELECT subjectno FROM `subject`
        WHERE subjectname = '數據庫結構-1'
    )
    ORDER BY studentresult DESC;
    
    
    -- 查詢課程為 高等數學-2 且分數不小于80分的學生的學號和姓名
    -- 方法一:使用連接查詢
    SELECT s.studentno,studentname
    FROM student s
    INNER JOIN result r
    ON s.`StudentNo` = r.`StudentNo`
    INNER JOIN `subject` sub
    ON sub.`SubjectNo` = r.`SubjectNo`
    WHERE subjectname = '高等數學-2' AND StudentResult>=80
    
    -- 方法二:使用連接查詢+子查詢
    -- 分數不小于80分的學生的學號和姓名
    SELECT r.studentno,studentname FROM student s
    INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
    WHERE StudentResult>=80
    
    
    -- 方法三:使用子查詢
    -- 分步寫簡單sql語句,然后將其嵌套起來
    SELECT studentno,studentname FROM student WHERE studentno IN(
        SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(
            SELECT subjectno FROM `subject` WHERE subjectname = '高等數學-2'
        )
    )
    
    

    常用函數

    數據函數:

    SELECT ABS(-8); /*絕對值*/
    SELECT CEILING(9.4); /*向上取整*/
    SELECT FLOOR(9.4); /*向下取整*/
    SELECT RAND(); /*隨機數,返回一個0-1之間的隨機數*/
    SELECT SIGN(0); /*符號函數: 負數返回-1,正數返回1,0返回0*/
    
    

    字符串函數:

    SELECT CHAR_LENGTH('我在學Mysql'); /*返回字符串包含的字符數*/
    SELECT CONCAT('我','愛','程序'); /*合并字符串,參數可以有多個*/
    SELECT INSERT('我愛編程helloworld',1,2,'超級熱愛'); /*替換字符串,從某個位置開始替
    換某個長度*/
    SELECT LOWER('Study'); /*小寫*/
    SELECT UPPER('Study'); /*大寫*/
    SELECT LEFT('hello,world',5); /*從左邊截取*/
    SELECT RIGHT('hello,world',5); /*從右邊截取*/
    SELECT REPLACE('堅持就能成功','堅持','努力'); /*替換字符串*/
    SELECT SUBSTR('堅持就能成功',4,6); /*截取字符串,開始和長度*/
    SELECT REVERSE('堅持就能成功'); /*反轉
    -- 查詢姓周的同學,改成鄒
    SELECT REPLACE(studentname,'周','鄒') AS 新名字
    FROM student WHERE studentname LIKE '周%';
    
    

    日期和時間函數:

    SELECT CURRENT_DATE(); /*獲取當前日期*/
    SELECT CURDATE(); /*獲取當前日期*/
    SELECT NOW(); /*獲取當前日期和時間*/
    SELECT LOCALTIME(); /*獲取當前日期和時間*/
    SELECT SYSDATE(); /*獲取當前日期和時間*/
    -- 獲取年月日,時分秒
    SELECT YEAR(NOW());
    SELECT MONTH(NOW());
    SELECT DAY(NOW());
    SELECT HOUR(NOW());
    SELECT MINUTE(NOW());
    SELECT SECOND(NOW());
    
    

    聚合函數

    函數名稱描述
    COUNT()返回滿足Select條件的記錄總和數,如 select count(*) 【不建議使用 *,效率低】
    SUM()返回數字字段或表達式列作統計,返回一列的總和。
    AVG()通常為數值字段或表達列作統計,返回一列的平均值
    MAX()可以為數值字段,字符字段或表達式列作統計,返回最大的值。
    MIN()可以為數值字段,字符字段或表達式列作統計,返回最小的值。

    實例:

    -- 查詢不同課程的平均分,最高分,最低分
    -- 前提:根據不同的課程進行分組
    SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高
    分,MIN(StudentResult) AS 最低分
    FROM result AS r
    INNER JOIN `subject` AS s
    ON r.subjectno = s.subjectno
    GROUP BY r.subjectno
    HAVING 平均分>80;
    
    

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费