MySQL学习笔记(二)

m 转载:http://www.cnblogs.com/best/p/6517755.html

1. 创建数据库

create database databasename;

  例如: create database study;  创建一个study的数据库

  使用数据库

use  databasename;

 例如: use  study;

  创建表:

create table student(Id int , name varchar(20));

插入数据:

insert into student values(2001,'梅西');

执行插入操作发现报错了:

因为涉及到中文了,在此有两种解决办法:

第一种:

 1.先把表删除:drop table student;

 2.alter database study character set gbk;

 3. create table student(Id int , name varchar(20));

 4. insert into student values(2001,'梅西');

 

第二种:

 1. create database study default character set utf8 collate utf8_general_ci;

db.opt 内容改为这样

 2.查看数据库编码

show variables like 'character_set%';

3.查看表结构

desc tablename;

4.外键:

  例子:员工表和部门表

create table t_emp(empno int,deptno int ,ename varchar(20),esex char(2));
  
alter table t_emp add constraint pk_empno primary key (empno);

create table t_dept(deptno int , dname varchar(20));

alter table t_dept add constraint pk_deptno primary key(deptno);

增加外键

alter table t_emp add constraint fk_depno foreign key(deptno) references t_dept(deptno);

部门表是父(主)表  员工表是子(从)表

 5.外部导入数据库

 source C:UsersAdministratorDesktop	est.sql

 6.数据查询-列指定别名

select empno  '工号',ename  '姓名' from emp;

7.数据查询-连接符函数

select empno , concat(ename,'#') from emp;

oracle可以用 ||作为连接符

select empno,ename||'#' from emp;

8.where条件查询

查询员工表中名字是Smith的员工信息

select empno,ename,job from emp where ename='smith';

查询员工表名字不等于Smith的员工信息

select empno,ename,job from emp where ename <> 'smith';

这里的<>用作不等于(!=)

9.查询部分行-条件(and, or, between ... and ...)

 查询部门号是30同时工资大于1500的员工信息

select empno,ename,job from emp where deptno=30 and sal >1500;

查询职位是经理或者是销售员

select empno,ename,job from emp where job='manager' or job='salesman';

工资800到1500之间的员工

select empno,ename,job from emp where sal between 800 and 1500;

工资不在800到1500之间的员工

select empno,ename,job from emp where sal between 800 and 1500;

10.数据查询-空值(NULL)

查询佣金是空的员工

select empno,ename,sal from emp where comm is null;

非空(not NULL)

select empno,ename,sal from emp where comm is not null;

 11.数据查询-in

select empno,ename,job from emp where ename in('smith','king');

12.模糊查询-like

查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容

通配符:'%'(0个多个字符)

通配符:'-' (单个字符)

查询名字的第一个字母是‘s’的员工名字

select ename from emp where ename like's%';

第二个字符任意匹配

select ename from emp where ename like's_ith';

13.数据查询-排序

按单个列名排序

select ename from emp order by ename desc;

desc降序排列 asc升序排列

按多个列名排序

select job,sal from emp order by job asc, sal desc;

按列的序号排序

select empno,ename,job from emp order by 2;

 14.数据查询-limit

 查询工资前五名

查询工资后五名

15.表达式与条件查询

where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件;

以查询所有性别为女的信息为例, 输入查询语句: select * from students where sex="女";

where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。

示例:

查询年龄在21岁以上的所有人信息: select * from students where age > 21;

查询名字中带有 "王" 字的所有人信息: select * from students where name like "%王%";

查询id小于5且年龄大于20的所有人信息: select * from students where id<5 and age>20;

16.聚合函数

 

获得学生总人数:select count(*) from students

获得学生平均分:select avg(mark) from students

获得最高成绩:select max(mark) from students

获得最低成绩:select min(mark) from students

获得学生总成绩:select sum(mark) from students

得到一张表中的总记录数:

select count(*) as 记录数 from emp; 

select count(0) as 记录数 from emp;

两者都是计算表的总记录数,count(0)计算表首的字段,如果为null也算一条记录

select avg(sal) as 平均薪资 from  emp;

select max(sal) as 最高工资 from emp;

select min(sal) as 最低薪资 from emp;

select sum(sal) as 薪资总和 from emp;
原文地址:https://www.cnblogs.com/chechen/p/8310256.html