• 数据库笔试面试题


    一 基本定义

    (1)表是数据的集合,按行和列组织。

    表是数据存储的简单形式。表格也被认为是关系的方便表示。在 DBMS 术语中,表称为关系,列称为字段,行称为元组。

    (2)临时表

    临时表(临时表可以在运行时创建,可以做普通表可以做的各种操作。这些临时表是在 tempdb 数据库中创建的。)

    本地临时表仅在当前连接时间可用。当用户与实例断开连接时,它会自动删除。它以井号 (#) 符号开头。

    CREATE TABLE #local temp table (  
    User id int,  
    Username varchar (50),  
    User address varchar (150)  
    )  
    Glo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    全局临时表名称以双哈希 (##) 开头。一旦这个表被创建,它就像一个永久的表。它始终为所有用户准备好,并且在整个连接被撤销之前不会被删除。

    CREATE TABLE ##new global temp table (  
    User id int,  
    User name varchar (50),  
    User address varchar (150)  
    )  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、SQL语言包含

    1.数据定义语言(DDL.Data Definition Language):create/drop/alter

    在数据库中创建或删除数据库对象等操作,如create、drop 、alter等语句

    数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:
    CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

    create基本操作

    创建表create

    SQL> CREATE TABLE STUDENTS (  
    ID INT                           NOT NULL,  
    NAME VARCHAR (20) NOT NULL,  
    AGE INT                         NOT NULL,  
    ADDRESS CHAR (25),  
    PRIMARY KEY (ID)  
    );  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    删除表drop

    DROP TABLE "table_name";  
    
    • 1

    更改表

    ALTER TABLE Employee RENAME To Coding_Employees ;#改表名
    ALTER TABLE Cars ADD Car_Model Varchar(20);#增加列
    
    • 1
    • 2


    2.数据操作语言(DML.Data Manipulation Language)

    用来插入、修改和删除表中的数据,如insert、update、delete语句


    insert基本用法

    以下SQL将学生的记录插入到Student_Records表中:

    INSERT INTO Student VALUES (201, Akash, Delhi, 18, 89, A2),   
    
    • 1

    update基本用法

    SQL UPDATE语句用于更改表所保存的记录的数据。要更新哪些行,由条件决定。要指定条件,我们使用 WHERE 子句。

    (1)更新一条记录的一个字段:

    UPDATE students  
    SET User_Name = 'beinghuman'  
    WHERE Student_Id = '3'  
    
    • 1
    • 2
    • 3

    (2)更新一条记录的多个字段:

    UPDATE students  
    SET User_Name = 'beserious', First_Name = 'Johnny'  
    WHERE Student_Id = '3'  
    
    • 1
    • 2
    • 3
    update+拼接

    下面是这样一个例子: 两个表a、b,想使b中的client字段值等于a表中对应id的name值

    表a:
    id name
    1 王
    2 李
    3 张

    表b:
    id ClientName
    1
    2
    3

    (1) update set from语句,set和where关联一个表时,会对关联的表进行二次查询

    UPDATE b  SET  ClientName  = a.name  FROM a,b  WHERE a.id = b.id
    
    • 1

    (2)在 SQL 中,表连接(left join、right join、inner join 等)常常用于 select 语句。 其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。

    UPDATE T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
    FROM T_OrderForm A LEFT JOIN T_ProductInfo  B ON B.L_ID=A.ProductID
    
    • 1
    • 2

    3.数据查询语言(DQL.Data Query Language)

    用来对数据库中的数据进行查询,指select语句

    SELECT 语句用于访问来自一个或多个数据库表和视图的记录,检索符合我们想要的条件的选定数据。
    通过使用此命令,我们还可以从表的特定列访问特定记录。

    Select基本用法

    SELECT Column_Name_1, ....., Column_Name_N FROM Table_Name; #访问特定字段的所有行记录
    SELECT * FROM table_name;  #访问表的所有字段中的所有行
    
    
    • 1
    • 2
    • 3

    Select+Where条件查询

    WHERE 子句与 SELECT 语句一起使用,仅返回表中满足查询中指定条件的那些行。

    查询表中 Emp_Panelty 为 500 的员工的记录:

    SELECT * FROM Employee_Details WHERE Emp_Panelty = 500;  
    
    • 1

    嵌套查询

    1、嵌套查询是在查询SQL中嵌入一个子查询SQL;

    2、嵌套查询会执行多条SQL语句;

    3、查询效率低,要多查一轮

    
    select sname 
    from student		--外层查询或者父查询
    where sno in 
    		(select sno
    		from SC				--内层查询或者子查询
    		where Cno = '2');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    连接查询

    关键字:inner join…on

    说明:组合两个表中的记录,返回关联字段符合查询条件的记录,也就是返回两个表的交集(阴影)部分。

    select *
    from table1 inner join table2
    where table1.id = table2.id
    
    • 1
    • 2
    • 3

    Select+group by分组显示

    GROUP BY 子句与 SELECT 语句一起使用,以显示表中列的公共数据:

    以下带有 GROUP BY 查询的 SELECT 列出了相同价格的汽车数量:

    SELECT COUNT (Car_Name), Car_Price FROM Cars_Details GROUP BY Car_Price;  
    
    • 1

    显示如下:

    Count (Car_Name)	Car_Price
    2	1000000
    2	900000
    
    • 1
    • 2
    • 3

    Select+Group by +Having

    SELECT 语句中的 HAVING 子句在 GROUP BY 子句定义的那些组中创建一个选择。

    Employee_Id	Employee_Name	Employee_Salary	Employee_City
    201	Jone	20000	Goa
    202	Basant	40000	Delhi
    203	Rashet	80000	Jaipur
    204	Anuj	20000	Goa
    205	Sumit	50000	Delhi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    以下查询显示了上述 Employee_Having 表中超过 5000 的员工的总工资:

    SELECT SUM (Employee_Salary), Employee_City FROM Employee_Having 
    GROUP BY Employee_City HAVING SUM(Employee_Salary)>5000;  
    
    • 1
    • 2

    Select+order by

    带有 SQL SELECT 语句的 ORDER BY 子句以排序方式显示记录或行。
    ORDER BY 子句按升序和降序排列值。

    SELECT * FROM Employee_Order ORDER BY Emp_Salary DESC;
    
    • 1


    4.数据控制语言(DCL.Data Control Language)

    用来控制数据库组件的存取许可,存取权限等,如GRANT、REVOKE等


    拓展

    连接JOIN(inner)

    在 SQL 的情况下,JOIN 的意思是 “组合两个或多个表”。

    SQL JOIN 子句从数据库中的两个或多个表中获取记录并将其组合在一起

    SELECT 列名1, 列名2, 列名3, 列名4   
       FROM 表名1 s, 表名2 p  
       WHERE s.ID =p.S_ID; 
    
    • 1
    • 2
    • 3

    left join

    SQL左连接返回左表中的所有值,它还包括右表中的匹配值,如果没有匹配的连接值,则返回NULL。

    customer表:

    ID	NAME	AGE	SALARY
    1	ARYAN	51	56000
    2	AROHI	21	25000
    
    • 1
    • 2
    • 3

    order表:

    O_ID	DATE	CUSTOMER_ID	AMOUNT
    001	20-01-2012	   2	    3000
    002	12-02-2012	   2	    2000
    
    • 1
    • 2
    • 3

    用 LEFT JOIN 连接这两个表,结果如下:

    SQL SELECT ID, NAME, AMOUNT,DATE  
    FROM CUSTOMER  
    LEFT JOIN ORDER  
    ON CUSTOMER.ID = ORDER.CUSTOMER_ID;  
    
    • 1
    • 2
    • 3
    • 4
    ID	NAME	AMOUNT	DATE
    1	ARYAN	NULL	NULL
    2	AROHI	3000	20-01-2012
    2	AROHI	2000	12-02-2012
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    4.00001Postgresql的内存管理-从哪里开始了解内存管理之架构理解
    什么是Rebex Total Pack for.NET?
    Qt国际化
    (十五)STM32——尝试把独立看门狗当成一款游戏来理解
    GenericBeanDefinition及其子类
    这几个小技巧,收藏起来总没错
    不堆概念、换个角度聊多线程并发编程
    java反射与注解详解,共同实现动态代理模式
    Tomact目录结构的介绍
    Vue 组件封装
  • 原文地址:https://blog.csdn.net/qq_41850194/article/details/128034507