数据库及SQL基础知识面试要点

匿名网友 匿名网友 发布于: 2015-10-15 00:00:00
阅读 185 收藏 0 点赞 0 评论 0

数据库

SQL的关键字和字符串不区分大小写,而数据库和表等区分

  • 找出当前服务器存在的数据库: SHOW databases;
  • 创建数据库: CREATE DATABASE test;
  • 如果test存在,访问它: USE test; 或者 CONNECT tset;
  • 显示数据库里面的表: SHOW tables;

约束a8ec8a13632762d092e4549aa2ec08fa513dc639

  • 主键是唯一标识表中每一行的列,每一张表必须包含主键:
    • 任意两行都不具有相同的主键值(组)
    • 每个行都必须具有一个主键值,不允许 NULL
    • 主键列中的值不允许修改或更新
    • 主键值不能重用。如果某行从表中删除,它的主键不能赋予以后的新行
  • 外健是表中的一个列,其值必须在另一个表的主键中列出
    • 能保证引用完整性
    • 防止意外的删除
  • 唯一约束用来保证一个列或一组列中数据的唯一。类是主键,但是
    • 表可以包含多个唯一约束,但每个表只允许一个主键
    • 唯一约束列可以包含NULL值
    • 唯一约束列可以修改
    • 和主键不一样,唯一约束不能用来定义外健
  • 检查约束,如指定范围等

创建表

  • 描述表的结构: DESC test;

导入数据

  • 创建一个文本,每一行包含一个记录,用 tab 把值分开,若使用 NULL 值,用 N 代替,将文本载入test表中,使用命令: load data local infile ‘/path/test.txt’ into table test;
  • 执行sql脚本: SOURCE /path/test.sql;

查记录

  • 检索所有记录: SELECT * FROM test;
  • 检索唯一的记录: SELECT DISTINCT owner FROM pet;
  • 检索范围:

増记录

  • 插入部分行 INSERT INTO Customers(cust_id,name) VALUES (‘1006′,’Mark’);
  • 插入检索出的数据 INSERT INTO Customers(cust_id) SELECT cust_id FROM Customers;
  • 复制表 CREATE TABLE Cust_2 AS SELECT * FROM Customers;
  • 增加列 ALTER TABLE Vendors ADD vend_phone CHAR(20);

改记录

更新指定数据

  • 列的重命名 SELECT name,(Year(current_date())-Year(birth)) age FROM pet;
  • 表的重命名 RENAME TABLE old_name TO new_name;

删记录

  • 删除指定行 DELETE FROM Customers WHERE cust_id = ‘1005’;
  • 删除表中所有行 TRUNCATE Customers;
  • 删除列 ALTER TABLE Vendors DROP vend_phone;
  • 删除表 DROP TABLE Vendors;

模式匹配

SELECT name FROM pet WHERE name LIKE ‘%m’;

  • _ 匹配单个字符
  • % 匹配任意字符,包括零个字符
  • 不能使用 =!= ,而使用 likenot like

聚集函数

计数行
  • SELECT COUNT( *) from pet; 对表中行的数目进行计数,不管表中是否含有NULL值
  • COUNT(列名) 对特定列中具有的值进行计数, 忽略 NULL

AVG(),SUM(),MAX(),MIN() 都要指定列名。

排序

  • order by 默认升序 SELECT name FROM pet ORDER BY birth;
  • 降序: SELECT name FROM pet ORDER BY birth DESC;

分组

SELECT cust_id, count( *) AS order FROM orders GROUP BY cust_id HAVING COUNT( *) >= 2;

  • GROUP BY 对数据进行分组
  • Having 过滤分组, Where 过滤行; Having 在分组后过滤, Where 在分组前过滤 :

联结

笛卡尔积 : SELECT vend_name, prod_name FROM Vendors, Products;

自然联结

自联结 :

外部联结,包含了那些在相关表中没有关联行的行

组合查询

UNION 是并操作,去掉重复的行

返回所有匹配的行,用 UNION ALL

使用 UNION 查询,只能用一个 ORDER BY 语句,且出现在最后一个SELECT语句后面,作用在返回的所有结果

NULL

  • NUll 意味着”没有值”或”未知值” ,不能用算术运算符比较
  • is nullis not null 是操作符 SELECT prod_name FROM products WHERE prod_price IS NULL
  • 布尔值为 true,false, unknownselect null is not unknown 返回0

下面的语句创建的副本只有属性,没有值

  • WHERE NULL = NULL 返回假
  • WHERE NULL is NULL 返回真

事务

  • 事务的开始: BEGIN;
  • 回退: ROLLBACK;
  • 提交: COMMIT;
  • 设置保留点 SAVEPOINT s1; 。回退到某个保留点 ROLLBACK TO s1;

评论列表
文章目录