一,单表查询
1.MySql查询数据
1)where语句包含条件
2)limit来设定返回的记录数
3)AND 或者 OR 指定一个或多个条件。
2.UPDATE 查询
UPDATE 表名 set 列名 = 新值 WHERE 列名称 = 某值
3.DELETE 语句
DELETE FROM 表名称 WHERE 列名称 = 值
4.MySQL LIKE 子句
1)SQL LIKE 子句中使用百分号 %字符来表示任意字符
2)SELECT 列名 FROM 表名 WHERE 列名 LIKE "n%"
5.分组查询 GROUP BY
SELECT 列名 from 表名 group by 列名
6.ORDER BY 排序
--默认升序排列
select * from 表名 where 列名 asc
--默认降序排列
select * from 表 order by 列 desc
--根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
select * from 表 order by 列1 desc,列2 asc
7.子查询
SELECT * FROM 表1 WHERE 列1= (SELECT 列2 FROM 表2);
子查询有两种分类方式: 按位置分类;和按结果分类
-
按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置
-
From子查询: 子查询跟在from之后
-
Where子查询: 子查询出现where条件中
-
Exists子查询: 子查询出现在exists里面
-
按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)
-
标量子查询: 子查询得到的结果是一行一列
-
列子查询: 子查询得到的结果是一列多行
-
行子查询: 子查询得到的结果是多列一行(多行多列) (1,2,3出现的位置都是在where之后)
-
表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)
例子 :
标量子查询
需求: 找到分类为科技的所有文章标题
列子查询
找出语文和数学都及格人的名字。表是这样的:
行子查询
行子查询: 返回的结果可以是多行多列(一行多列)
需求:找出年龄最大且身高最高的人
方案一:
方案二:
表子查询
表子查询: 子查询返回的结果是多行多列的二维表: 子查询返回的结果是当做二维表来使用
需求:找出每个人最好的成绩
Exists子查询
Exists: 是否存在的意思, exists子查询就是用来判断某些条件是否满足(跨表), exists是接在where之后: exists返回的结果只有0和1.
需求:如果存在的话身高大于2米的人,列出表中所有数据
8.复制一张表到另一张表中去
1)复制表结构及数据到新表
create table 新表 select * from 旧表
2)只复制表结构到新表
create table 新表
select * from 旧表 where 1=2
让WHERE条件不成立.
二、多表查询(连接查询)
1.交叉连接 cross join
交叉连接分开列名时,使用CROSS JOIN关键字而不是逗号。
SELECT * FROM table1, table2
SELECT * FROM table1 CROSS JOIN table2
2.内连接 inner join
INNER JOIN 与 JOIN 是相同的
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
3.外连接 outer join
4.左外连接
左连接就是以左边的表(left join 左边的表)为主表,即使有些记录关联不上,主表的信息也能全部查询出来,也就是左边的表数据全部展示,右边表的数据复合条件的展示,不符合条件的以空值代替,适合那种需要求出维度(比如求出所有人员)的需求:
select * from student s left join color c on s.stuname = c.stuname;
等同于select * from student s left outer join color c on s.stuname = c.stuname;
5.右外连接
如果有需求要求在结果中展现所有的颜色信息,就可以用右连接:
还有另一种写法,可以达到相同的外连接效果:比如左外连接等同于以下的语句:
select * from student s ,color c where s.stuname = c.stuname(+);
同样右连接是这样的:
select * from student s ,color c where s.stuname(+) = c.stuname
三、索引
1.mysql索引有哪些,常见(常用)的有哪些,以及各种索引的区别及操作
1)B+Tree索引和Hash索引.
Mysql各种索引区别:
普通索引:最基本的索引,没有任何限制
唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它 是一种特殊的唯一索引,不允许有空值。
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时应该将最常用(频率)作限制条件的列放在最左边依 次递减。
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引
PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `col` )
UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`col`)
INDEX(普通索引) ALTER TABLE `table_name` ADD INDEX index_name (`col`)
FULLTEXT(全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `col` )
组合索引 ALTER TABLE `table_name` ADD INDEX index_name (`col1`, `col2`, `col3` )
-------------------------------------------------------------------------------------------------------------------------
cmd窗口连接数据库
安装后默认没有给定密码:密码为空
mysql--u root 可以直接登录,不用输入任何密码
mysqladmin -u root password ‘123’ 修改密码(原来密码为空)
mysqladmin -u root -p 登录
输入密码 :123
exit或quit 退出
show database;//显示当前用户里的所有数据库 安装后默认有两个数据库 :mysql ,test;
create database bbb; ///新建一个bbb的数据库
drop database bbb; // 删除一个数据库
describe student //显示表的结构
desc student ; //简写 显示表的结构
alter table status add sex varchar(20); // 为某个表增加一个字段
alter table student modify sex varchar(20);//修改某个字段的字段长度
alter table student change name studentname varchar(30);//修改某个字段的名称为 change
alter table newstudent add phone varchar(40) after id; //添加一个字段,把他添加到一个指定的字段后面