MySQL学习(二)SQL语句的总结
1、连接查询和关联查询
连接查询:把两个表中相同的元素的连接就可以查询,
使用:where里,select table1.*,table2.* from table1,table2 where table1.id=table2.id;
关联查询:把两个表关联,之后的操作对两个表都有影响(left join,right join,full join,
inner join)
使用:不用where,select table1.*,table2.* from table1 (inner)join table2 on
table1.id=table2.id;
(1)SELECT * FROM score, student WHERE score.id = student.id ...
(2)SELECT * FROM score JOIN student ON (score.id = student.id) WHERE ...
(3)SELECT * FROM score JOIN student USING (id) WHERE ...
前两种写法,只是写法不同而已,其功能完全相同;最后一种,会将同名的列,合并起来。
第一种,是传统写法,SQL89标准里,就是这种;后面两种,是在SQL92标准才有的!
2、多表查询(连接查询)关系数据库中最主要特征
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。
连接:
(1)自连接;一个表自己与自己建立连接称为自连接或自身连接。可以把一个表的某一行与同一表中的
另一行连接起来。
(2)内连接;
语法:select 字段名列表 from 表名 [inner] join 表名 on 连接条件 [where 条件表达式]
分类:
(1)等值连接:是指表之间通过“等于”关系连接起来,产生一个临时表。
(2)不等值连接:是指表之间的连接关系不是“等于”,而是其它关系
这些运算符包括>、>=、<=、<、!>、!<和<>。
(3)自然连接:在等值连接中消除重复列就是自然连接。表A natural join B where 连接条件
(3)外连接;外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的那些数据行连接起来之外
,
(4)交叉连接;交叉连接不使用任何连接条件来限制结果集合,将各表的记录以“笛卡尔”积的方式组合
起来。
(5)联合查询:UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显
示。
(6)复杂查询:---复合连接,三个表以上的连接。
3、查询平均成绩
select class_name as 班级名,avg(stu_score1) as 平均成绩 from stu_table,class_table where stu_table.class_id=class_table.class_id;
4、查询成绩排名的前五名
select stu_name,stu_score1 from stu_table order by stu_score1 desc limit 5 ;
5、在college_id字段后边加入tel字段
alter table stu_table add tel varchar(15) after college_id;
6、-- 把tel字段修改成tel1 --
alter table stu_table change tel tel1 varchar(30);
7、新建表(SQL语句建表)(需要刷新才能见到)
create table test1(
test_id int not null auto_increment,
test_title varchar(100) not null,
test_author varchar(40) not null,
primary key ( test_id )
);
字段使用not null属性,不希望这个字段值为null。
字段使用auto_increment属性告诉我们自动带有增加id字段下一个可用编号
字段primary key用于定义此列作为主键
8、新建表(通过命令行提示符来创建表)使用数据库TUTORIALS,建立表tutorials_tbl
root@host# mysql -u root -p
Enter password:
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
-> tutorial_id INT NOT NULL AUTO_INCREMENT,
-> tutorial_title VARCHAR(100) NOT NULL,
-> tutorial_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( tutorial_id )
-> );
Query OK, 0 rows affected (0.16 sec)
mysql>
9、-- 删除表 --
drop table tutorials_tbl; key用于定义此列作为主键。
10、my sql约束条件
(1)主键(PRIMARY KEY)
标识该属性为该表的主键,可以唯一的标识对应的记录。
(2)外键(FOREIGN KEY)
标识该属性为该表的外键,与某个表的主键关联。
(3)唯一性(UNIQUE)
标识该属性的值是唯一的。
(4)非空(NOT NULL)
标识该属性不能为空。
(5)默认值(DEFAULT)
为该属性设置默认值。
* MySQL不支持CHECK约束,但可以使用CHECK约束而没有任何效果。
#建表(班级表)
create table t_class(
id int primary key auto_increment, #班级id为主键,id设置自增长
className varchar(20) unique not null #班级名称,不能为空且唯一
);
#创建学生表
create table t_student(
id int primary key auto_increment, #学生id为主键,id自增长
name varchar(20) unique not null, #学生姓名,不能为空且唯一
sex varchar(1) not null, #学生性别,不能为空
birthday datetime not null default '1992-10-01 00:00:00', #学生出生日期,不能为空,默认
值为1992-10-01 00:00:00
classId int, #学生所属的班级id为外键,关联班级表't_class'的主键id
constraint test_class foreign key(classId) references t_class(id) #创建外键约束,约束名
为test_class
);
11、mysql视图
理由(原因):
(1)安全性,用于权限与视图进行绑定,使用特性:grant语句针对视图进行授予权限
(2)查询性能提高
(3)灵活性的功能需求,改动表的结构工作量大,使用虚表达到少修改效果
(4)复杂的查询需求
视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引
用,视图的内容总是与真实表的内容是一致的。
视图这样设计有什么好处?节省空间,内容是总是一致的话,那么我们不需要维护视图的内容,维
护好真实表的内容,就可以保证视图的完整性了。
针对每个表创建一个视图(注:视图也是一种表,是虚拟表。不能与已有的表(视图)出现重名)
create view teams(字段,字段,字段) as select distinct(字段,字段) from 表名
例如:#创建视图
create view test3(stu_id,stu_name,stu_score1,stu_sex) as
select distinct stu_id,stu_name,stu_score1,stu_sex from stu_table;
12、数据库优化1
应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,
Sql 代码 : select id from t where num=10 or num=20;
可以这样查询:
Sql 代码 : select id from t where num=10 union all select id from t where num=20;
13、数据库优化2
in 和 not in 也要慎用,否则会导致全表扫描,如:
Sql 代码 : select id from t where num in(1,2,3);
对于连续的数值,能用 between 就不要用 in 了:
Sql 代码 : select id from t where num between 1 and 3;
14、数据库优化3
应尽量避免在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表扫描。
Sql 代码 : select id from t where num/2=100;
可以这样查询:
Sql 代码 : select id from t where num=100*2;
MySQL学习(二)SQL语句的总结的更多相关文章
- MySQL学习(二)——SQL语句创建删除修改以及中文乱码问题
一.对数据库的操作 1.创建一个库 create database 库名; 创建带有编码的:create database 库名 character set 编码; 查看编码:show create ...
- mysql学习之 sql语句的技巧及优化
一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...
- MYSQL学习笔记——sql语句优化工具
优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...
- MySQL学习【SQL语句上】
1.连接服务端命令 1.mysql -uroot -p123 -h127.0.0.1 2.mysql -uroot -p123 -S /tmp/mysql.sock 3.mysql -uroot -p ...
- MYSQL学习笔记——sql语句优化之索引
上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍my ...
- MySQL的常用SQL语句.md
修改密码 这是常见的大家一般都要用的 首先 安装成功了打开cmd --> mysql -u root -p -->输入你的密码 修改mysql root用户密码 格式 ...
- Oracle,SQL Server 数据库较MySql数据库,Sql语句差异
原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...
- MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系
数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...
- mysql一条sql语句如何执行的?
mysql 一条sql语句如何执行的? 文章内容源自:极客时间-林晓彬老师-MySQL实战45讲 学习整理 在了解一条查询语句如何执行之前,需要了解下MySQL的基本架构是怎样的,如下图所示: 可以看 ...
- 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...
随机推荐
- JS中的柯里化与反柯里化
先占个位 看了一天折资料,感觉清楚多了
- SQL Server 2016 CTP2.2 的关键特性
SQL Server 2016 CTP2.2 的关键特性 正如微软CEO 说的,SQL Server2016 是一个Breakthrough Flagship Database(突破性的旗舰级数据库 ...
- Visual Studio 2015 前端开发工作流
Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...
- HTML5- Canvas入门(七)
这是本系列的最后一篇入门文章,主要是对剩余的未说明的canvas方法来逐个介绍. 首先,如果你是一名擅长矢量设计的设计师,对Illustrator或者Fireworks很熟悉的话,那你肯定知道它们有一 ...
- AngularJS基础入门初探
一.AngularJS简介 1.1 什么是AngularJS (1)一款非常优秀的前端JS框架,可以方便实现MVC/MVVM模式 (2)由Misko Hevery 等人创建,2009年被Google所 ...
- Python调用C++的DLL
import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...
- 说说SQL Server 网络配置
打开Sql Server Configuration Manager,里面显示了SQL Server的网络配置,这些到底表示什么含义呢? 图一:MSSQLSERVER的协议 这些配置选项,其实就是为了 ...
- 代码提交的时候可以插入表情了-GitHub表情的使用
GitHub官方有个表情项目,旨在丰富文字信息.意味着你可以在提交代码的时候,在提交信息里面添加表情,同时也可以在项目的ReadMe.md文件里面使用表情.除此之外,当然还有项目在GitHub上的wi ...
- iOS-证书申请
本文讲述发布证书的申请 首先登陆https://developer.apple.com(99美元账号) a.点击页面右上角 b.进入 c.选择证书类型 distribution,选择添加 d.点击+后 ...
- UIwebView 和 H5交互详情
背景: 最近公司准备上一个只有原生登录界面 + H5网页 ,并且支持ios7.0 以上系统的混合app;这可把我难住了,原生的UI界面我可以正写反写各种style把界面搭建起来.而要这个app的难点在 ...