Database_数据库基础:

1. 基础SQL语句

1.1 向'成员列表'中新增一个'用户名为 'test','真实姓名'为'测试账户','性别' 为 '女'的记录

INSERT INTO sys_user (account,realname,gender) VALUE ('test','测试用户','f');

1.2 查询'成员列表'页面中总共有多少条记录?

SELECT COUNT(*) FROM sys_user;

1.3 查询'成员列表'中前3条记录?

SELECT * FROM sys_user LIMIT 3;

1.4 查询'成员列表'中第2条记录?

SELECT * FROM sys_user LIMIT 1,1;

1.5 按照'成员列表'中'编号'的降序排序,显示所有的记录信息

SELECT * FROM sys_user ORDER BY id DESC;

1.6 查询'成员列表'中'用户名'为'test'的记录信息,只需要显示'编号','用户名','真实姓名'字段信息

SELECT id,account,realname FROM sys_user WHERE account = 'test';

1.7 查询'成员列表'中'用户名'为'hello',并且"性别"为女的记录

SELECT * FROM sys_user WHERE account='hello' AND gender='f';

1.8 查询'成员列表'中'真实姓名'姓'张'的所有成员的"真实姓名"和"性别"

SELECT realname,gender FROM sys_user WHERE realname LIKE '张%'; 

1.9 随意构造一张符合要求的表,编写SQL语句:按照部门编号升序方式显示,查询每个部门的平均身高,部门"Market"不用查询

-- * 代表所有的字段
-- select后跟的是字段名; from后跟的是表名
SELECT * FROM sys_user ;-- 查询XXXX‘成员列表’中所有的‘编号’
SELECT id FROM sys_user ;-- 查询XXXX‘成员列表’中所有的‘编号’,'真实姓名'
SELECT id,realname FROM sys_user ;-- 创建数据库
CREATE DATABASE b ;-- 创建表
USE a ;
CREATE TABLE c1( id INT(4), NAME CHAR(20), age INT(3));-- 查看表结构
DESC c1 ;-- 查询
SELECT * FROM c1 ;-- 插入数据
INSERT INTO c1 VALUE ('1','zhangsan','18');
INSERT INTO c1(id,NAME) VALUE ('2','lisi');-- 增、删、改、查
-- 改
UPDATE c1 SET NAME = 'zhangsanfeng' WHERE id = '1' ;
UPDATE c1 SET NAME = 'wangwu',age = '20' WHERE NAME = 'lisi' ;-- 删除
DELETE FROM c1 WHERE id = '2' ;-- 清空表数据
TRUNCATE c1 ;-- 去重
SELECT DISTINCT * FROM c1 ;-- 给表c1添加主键(设置id为主键)
-- 主键是唯一的,不能重复
ALTER TABLE c1 ADD PRIMARY KEY(id) ;
DESC c1 ;-- 查询XXXX’成员列表‘前3条记录
SELECT * FROM sys_user LIMIT 3;
SELECT * FROM sys_user LIMIT 0,3;-- 查询XXXX’成员列表‘第2条和第3条记录
SELECT * FROM sys_user LIMIT 1,2;-- 查询’编号‘为1,并且’用户名‘为'admin'的记录
SELECT * FROM sys_user WHERE id = '1' AND account = 'admin' ;-- 查询’编号‘为1的记录 和 ‘用户名’为'zhangsan'的记录
SELECT * FROM sys_user WHERE id = '1' OR account = 'zhangsan' ;-- 将‘编号’为1,2,3的记录都查询出来
SELECT * FROM sys_user WHERE id = '1' OR id = '2' OR id = '3' ;
SELECT * FROM sys_user WHERE id IN ('1','2','3') ;-- 将‘编号’除了1,2,3以外的所有记录都查询出来
SELECT * FROM sys_user WHERE id NOT IN ('1','2','3') ;-- 查询‘编号’大于1,小于500的所有记录
SELECT * FROM sys_user WHERE id > 1 AND id < 500 ;-- 查询‘编号’大于等于10,小于等于500的所有记录
SELECT * FROM sys_user WHERE id >= 1AND id <= 500 ;-- between .. and ..
SELECT * FROM sys_user WHERE id BETWEEN 1 AND 500 ;-- 将‘真实姓名’姓‘张’的所有记录都查询出来
-- 模糊查询
SELECT * FROM sys_user WHERE realname LIKE '张%' ;-- 将‘真实姓名’姓‘张*’的所有记录都查询出来
-- _ 代表1个
SELECT * FROM sys_user WHERE realname LIKE '张_' ;-- 按照’编号‘降序方式显示’成员列表‘中所有的记录
-- order by 排序
-- desc 降序
-- asc 升序,默认就是升序,可以不用写
-- 创建表USE a;CREATE TABLE c4(id INT(4),market CHAR(20),heigh INT(8));INSERT INTO c4 (id,market,heigh) VALUE ('23','a','167');INSERT INTO c4 (id,market,heigh) VALUE ('34','a','162');INSERT INTO c4 (id,market,heigh) VALUE ('13','b','187');INSERT INTO c4 (id,market,heigh) VALUE ('42','b','176');SELECT * FROM c4;SELECT AVG(heigh) FROM c4 GROUP BY market;
-- 查询表中所有的数据(中间有空格)/*多行注释,*代表所有的字段*/SELECT * FROM sys_user;SELECT id FROM sys_user;SELECT PASSWORD FROM sys_user;SELECT dept FROM sys_user;SELECT realname FROM sys_user;-- 创建数据库CREATE DATABASE A;CREATE DATABASE b;-- 创建表USE a;CREATE TABLE c1(id INT(4),NAME CHAR(20),age INT(3));-- 查看表结构DESC c1;SELECT * FROM c1; -- 查询INSERT INTO c1 (id,NAME) VALUE ('2','lisi'); -- 插入数据INSERT INTO c1 (id,NAME) VALUE ('3','lisi-1'); -- 插入数据INSERT INTO c1 (id,NAME) VALUE ('4','lisi-2'); -- 插入数据INSERT INTO c1 (id,NAME) VALUE ('5','lisi-3'); -- 插入数据-- 增、删、改、查UPDATE c1 SET NAME = 'zhangsan' WHERE id ='1';UPDATE c1 SET NAME = 'lixiaosi',age='20' WHERE id ='2';DELETE FROM c1 WHERE id = '2';-- 清空表数据TRUNCATE c1;SELECT * FROM c1; -- 查询-- 去重SELECT DISTINCT * FROM c1;-- 创建表 添加主键USE a;CREATE TABLE c2(id INT(4),NAME CHAR(20),age INT(3));-- 给表2添加主键 将ID设置为主键ALTER TABLE c2 ADD PRIMARY KEY(id);INSERT INTO c2 (id,NAME) VALUE ('3','lisi-3'); -- 插入数据INSERT INTO c2 (id,NAME) VALUE ('4','lisi-4'); -- 插入数据INSERT INTO c2 (id,NAME) VALUE ('5','lisi-5'); -- 插入数据INSERT INTO c2 (id,NAME) VALUE ('6','lisi-6'); -- 插入数据INSERT INTO c2 (id,NAME) VALUE ('7','lisi-7'); -- 插入数据INSERT INTO c2 (id,NAME) VALUE ('8','lisi-8'); -- 插入数据SELECT * FROM c2;USE ranzhi;-- select * from sys_user where id =1 or id =2 or id=3;SELECT * FROM sys_user LIMIT 3; -- 显示前三行SELECT * FROM sys_user LIMIT 1,2; -- 显示第二行,第三行SELECT * FROM sys_user;SELECT * FROM sys_user WHERE id='1' AND account ='ranzhi';SELECT * FROM sys_user WHERE id='1' OR account ='lisansan';SELECT * FROM sys_user WHERE id='1' OR id='2' OR id='3';SELECT * FROM sys_user WHERE id IN('1','2');SELECT * FROM sys_user WHERE id IN('1','2','3');SELECT * FROM sys_user WHERE id >'1' AND id <'4';SELECT * FROM sys_user WHERE id >='1' AND id <='4';SELECT * FROM sys_user WHERE id BETWEEN 1 AND 4;SELECT * FROM sys_user WHERE id NOT IN('1','2');SELECT * FROM sys_user;SELECT * FROM sys_user WHERE realname LIKE '李%'; -- 模糊查询SELECT * FROM sys_user WHERE realname LIKE '李_';SELECT * FROM sys_user ORDER BY id DESC; -- 降序SELECT * FROM sys_user ORDER BY id ASC;  -- 升序SELECT * FROM sys_user ORDER BY realname DESC;-- 几个常用的函数-- 查询列表中总共有多少条记录SELECT COUNT(*) FROM sys_user;-- 求和-- 查询成员列表中所有编号之和SELECT SUM(id) FROM sys_user;SELECT MAX(id) FROM sys_user; -- 最大值SELECT MIN(id) FROM sys_user; -- 最小值SELECT AVG(id) FROM sys_user; -- 平均值USE a;CREATE TABLE c3(id INT(4),NAME CHAR(200),score INT(8))SELECT * FROM c3; -- 查询INSERT INTO c3 VALUE ('1','zhangsan','39'); -- 插入数据INSERT INTO c3 VALUE ('1','zhangsan','40'); -- 插入数据INSERT INTO c3 VALUE ('1','zhangsan','60'); -- 插入数据INSERT INTO c3 VALUE ('2','lisi','44'); -- 插入数据INSERT INTO c3 VALUE ('2','lisi','58'); -- 插入数据INSERT INTO c3 VALUE ('2','lisi','50'); -- 插入数据SELECT DISTINCT NAME FROM c3; -- 去重SELECT NAME,SUM(score) FROM c3 WHERE NAME = 'zhangsan';SELECT NAME,SUM(score) FROM c3 GROUP BY id; -- 分组SELECT id,NAME,SUM(score) FROM c3 WHERE NAME = 'lisi';SELECT id,NAME,SUM(score) FROM c3 WHERE NAME = 'zhangsan';SELECT NAME,SUM(score) FROM c3 GROUP BY id HAVING NAME = 'lisi';SELECT id,SUM(score) FROM c3 GROUP BY id HAVING id = '1';SELECT * FROM sys_user;-- DELETE FROM sys_user WHERE id = '5';INSERT INTO sys_user (account,realname,gender) VALUE ('test','测试用户','f'); -- 插入数据INSERT INTO sys_user (account,realname,gender) VALUE ('hello','测试用户','f'); -- 插入数据SELECT COUNT(*) FROM sys_user;SELECT * FROM sys_user LIMIT 3; -- 显示前三行SELECT * FROM sys_user LIMIT 1,1;SELECT * FROM sys_user ORDER BY id DESC; -- 降序SELECT id,account,realname FROM sys_user WHERE account = 'test';SELECT * FROM sys_user WHERE account='hello' AND gender='f';SELECT realname,gender FROM sys_user WHERE realname LIKE '李%';-- 创建表USE a;CREATE TABLE c4(id INT(4),market CHAR(20),heigh INT(8));INSERT INTO c4 (id,market,heigh) VALUE ('23','a','167');INSERT INTO c4 (id,market,heigh) VALUE ('34','a','162');INSERT INTO c4 (id,market,heigh) VALUE ('13','b','187');INSERT INTO c4 (id,market,heigh) VALUE ('42','b','176');SELECT * FROM c4;SELECT AVG(heigh) FROM c4 GROUP BY market;/*DELETE FROM c4 WHERE id = '23';DELETE FROM c4 WHERE id = '34';DELETE FROM c4 WHERE id = '13';DELETE FROM c4 WHERE id = '42';*/SELECT * FROM sys_user ORDER BY id DESC ;SELECT * FROM sys_user ORDER BY id ASC;-- 分组SELECT NAME, SUM(score) FROM c2 GROUP BY id ;-- Q:  查询’zhangsan'这个人的‘编号’及总成绩SELECT id, SUM(score) FROM c2 WHERE NAME = 'zhangsan' ;SELECT NAME, SUM(score) FROM c2 GROUP BY id HAVING NAME = 'zhangsan';

2. 优化查询速率

2.1 避免全表扫描,请勿使用*号,以防返回大量的数据;

2.2 避免使用!=或<>操作符在where子句中,避免全表扫描:

2.3 请勿在where子句中将表达式或函数放在比较符号的左侧,以防全表扫描;

例:xx where score + 10 > 60;

优化:xx where score > 60 – 10;

2.4 使用limit限制查询返回的数据行数,限制不需要的数据;

2.5 使用between、exists、not exists代替in或not in,同时避免系统无法使用索引;

推荐使用join代替子查询;

例:xx where score in (60,99);

优化:xx where score between 60 and 99;

2.6 使用union或union all代替or;

例:xx where score = 60 or score = 99;

优化:xx where score = 60 union xx where score = 99;

3. 多表查询

-- dept(dept_id,dept_name,employ_name,employ_sg)
select dept_name,avg(employ_sg) from dept where employ_name <> 'Market' group by employ_name order by dept_id asc;
select dept_name,avg(employ_sg) from dept group by employ_name having employ_name <> 'Market' order by dept_id asc;

4. 牛刀小试

4.1 创建表数据

use test;CREATE TABLE test.Student(Sid VARCHAR(10),Sname VARCHAR(10),Sage DATETIME,Ssex NVARCHAR(10));INSERT INTO Student VALUES('01' , '赵雷' , '1990-01-01' , '男');INSERT INTO Student VALUES('02' , '钱电' , '1990-12-21' , '男');INSERT INTO Student VALUES('03' , '孙风' , '1990-05-20' , '男');INSERT INTO Student VALUES('04' , '李云' , '1990-08-06' , '男');INSERT INTO Student VALUES('05' , '孙风' , '1991-12-01' , '男');INSERT INTO Student VALUES('06' , '吴兰' , '1992-03-01' , '女');INSERT INTO Student VALUES('07' , '郑竹' , '1989-07-01' , '女');INSERT INTO Student VALUES('08' , '王菊' , '1990-01-20' , '女');CREATE TABLE test.Course(Cid VARCHAR(10),Cname VARCHAR(10),Tid VARCHAR(10));INSERT INTO Course VALUES('01' , '语文' , '02');INSERT INTO Course VALUES('02' , '数学' , '01');INSERT INTO Course VALUES('03' , '英语' , '03');CREATE TABLE test.Teacher(Tid VARCHAR(10),Tname VARCHAR(10));INSERT INTO Teacher VALUES('01' , '张三');INSERT INTO Teacher VALUES('02' , '李四');INSERT INTO Teacher VALUES('03' , '王五');CREATE TABLE test.SC(Sid VARCHAR(10),Cid VARCHAR(10),score DECIMAL(18,1));INSERT INTO SC VALUES('01' , '01' , 80);INSERT INTO SC VALUES('01' , '02' , 90);INSERT INTO SC VALUES('01' , '03' , 99);INSERT INTO SC VALUES('02' , '01' , 70);INSERT INTO SC VALUES('02' , '02' , 60);INSERT INTO SC VALUES('02' , '03' , 80);INSERT INTO SC VALUES('03' , '01' , 80);INSERT INTO SC VALUES('03' , '02' , 80);INSERT INTO SC VALUES('03' , '03' , 80);INSERT INTO SC VALUES('04' , '01' , 50);INSERT INTO SC VALUES('04' , '02' , 30);INSERT INTO SC VALUES('04' , '03' , 20);INSERT INTO SC VALUES('05' , '01' , 76);INSERT INTO SC VALUES('05' , '02' , 87);INSERT INTO SC VALUES('06' , '01' , 31);INSERT INTO SC VALUES('06' , '03' , 34);INSERT INTO SC VALUES('07' , '02' , 89);INSERT INTO SC VALUES('07' , '03' , 98);

4.2 题目

4.2.1 查询姓“张”的老师的个数;

SELECT COUNT(*) FROM teacher WHERE Tname LIKE '张%';

4.2.2 查询男生、女生人数;

SELECT COUNT(*) AS 男 FROM Student WHERE Ssex='男';SELECT COUNT(*) AS 女 FROM Student WHERE Ssex='女';

4.2.3 查询所有同学的学号、姓名、选课数、总成绩;

SELECT Student.Sid AS 学号,Student.Sname AS 姓名,COUNT(sc.Cid) AS 选课数, SUM(sc.score) AS 总成绩 FROM Student LEFT JOIN sc ON Student.Sid=sc.Sid GROUP BY Student.Sid;

4.2.4 查询平均成绩大于60 分的同学的学号和平均成绩;

SELECT * FROM (SELECT Student.Sid AS 学号,AVG(sc.score) AS 平均成绩 FROM Student LEFT JOIN sc ON Student.Sid=sc.Sid GROUP BY Student.Sid)cc WHERE cc.平均成绩>60;

5. 部分问答

5.1 触发器的作用?

答:触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

5.2 什么是存储过程?用什么来调用?

答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

5.3 索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

5.4 什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

5.5 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整性和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

5.6 什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

锁:在数据库管理系统(Database Management System)中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

5.7 什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

Database_数据库基础笔记整理相关推荐

  1. 数据库基础笔记(MySQL)1 —— 基础概念

    (写算法题目把自己心态搞崩了,休息两天顺便把之前学的数据库手写笔记记录在网上方便查阅,因为只是自己学的时候做的笔记,如果有错误欢迎大家指正,过两天再重回算法的怀抱哈哈) 如何下载配置 这个感觉视频讲的 ...

  2. 知了课堂 Python Flask零基础 笔记整理

    目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...

  3. SQL Server 数据库基础笔记分享(上)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

  4. mysql数据库查询笔记_MySql数据库基础笔记(一)

    一.表与库的概念 数据库管理数据,它是以什么样的形式组成的? 生活中的表---->表 table 多行多列,传统的数据库都是这样的;声明了表头,一个表创建好了,剩下的就是往表中添加数据 多张表放 ...

  5. 初学Verilog语言基础笔记整理(实例点灯代码分析)持续更新~

    实例:点灯学习 一.Verilog语法学习 1. 参考文章 刚接触Verilog,作为一个硬件小白,只能尝试着去理解,文章未完-持续更新. 参考博客文章: Verilog语言入门学习(1) Veril ...

  6. SQLServer数据库基础(笔记)

    1.创建数据库 方式:1.工具创建数据库 2.脚本创建 服务器名称:local . 127.0.0.1 远程:服务器IP,端口号 身份验证:1.windows身份验证 2.SQL Server身份验证 ...

  7. mysql基础和高级整理_MySQL基础笔记整理

    MySQL安装和启动 Windows下安装和启动服务 安装 1 在MySQL官网下载zip文件, 2 在任意位置保存解压.这里在E盘创建MySQL目录 E:\MySQL\ 3 E:\Monkey\my ...

  8. 【狂神说】Docker网络基础笔记整理+重点详解

    目录 前言 容器互联(Docker网络) 1.1 Docker的网卡--docker0 1.2 容器互联的方法 1.2.1 使用 --link命令: 1.2.2 自定义docker网络解决 --lin ...

  9. MySQL数据库基础笔记

    数据库 MySQL 1.安装MySQL 安装mysql 安装 服务器端 和 客户端 1, 服务器端: 用来存储了数据重点步骤: 设置字符集utf-8避免中文乱码.使用端口号: 默认是3306使用的服务 ...

最新文章

  1. 交替最小二乘+ALS+推荐+Spark
  2. SAP QM 样品废弃后如何删除physical samples记录?
  3. python类中方法的执行顺序-Python中实例化class的执行顺序示例详解
  4. SD-WAN将成为物联网部署中的骨干网—Vecloud
  5. 简单的家庭无线路由设置
  6. 【Linux系统编程】互斥锁
  7. Build 2016,你可能忽视的几个细节
  8. matlab 多项式表达,MATLAB自学笔记(十七):多项式及其函数
  9. Lesson 4 Part 2 Softmax Regression
  10. python3.7中Gluonts与Mxnet安装问题
  11. 真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记
  12. 使用python+opencv写一个简单的条形码识别代码
  13. linux之ps aux、ps -aux、ps -ef命令的区别
  14. Maximum length exceeded错误的解决办法
  15. word论文:参考文献字间距太大的处理方法
  16. [置顶] iOS中 支付宝钱包详解/第三方支付
  17. python可以在苹果系统上装吗_在 Mac OS X 装不上 TensorFlow?看了这篇就会装
  18. QQ云控引流 为您定制营销推广方案
  19. vue项目,使用FullCalendar日历插件
  20. java避免活锁.死锁的解决,死锁 活锁 饥饿 出现原因及解决方案

热门文章

  1. 给中国学生的第三封信:成功、自信、快乐
  2. 体会视觉的震撼,从10亿光年到0.1飞米
  3. python泰坦尼克号生存预测论文_用Python预测泰坦尼克号生存情况
  4. 数字基带信号的功率谱密度
  5. 华为荣耀3x G750-T01 Root操作
  6. VISI 21五金冲压连续模具设计视频教程 SDK21教程
  7. ASP.Net0626快播影院视频网的设计与实现
  8. java replica set_kubernetes ReplicaSet的简单使用
  9. ncut算法分割图像的matlab,Ncut_9 归一化切割和图像分割算法及其论文, 不仅度量了不同分组之间总体不相似性, matlab 269万源代码下载- www.pudn.com...
  10. 110配线架打法图解_110配线架详解[来自互联网]