首页 > 代码库 > 数据库入门(一)
数据库入门(一)
1.数据保存
数据保存在内存:
优点: 存取速度快
缺点: 数据不能永远保存
数据保存在文件:
优点: 数据永远保存
缺点:
1)速度比内存操作慢,频繁的IO操作
2)查询数据不方便
数据保存在软件:
1)数据永远保存
2)速度比较快
3)查询和管理数据方便
2.常见数据库软件
SQLServer: 微软的产品。与net平台兼容比较好。(收费)
Oracle:甲骨文公司的产品。 与java平台兼容性最好。(收费)
收购Sun公司: java
收购mysql: mysql 数据库软件
中大型企业(中大型应用)
mysql: 开源产品。免费的。与java平台兼容性最好。
中小企业(中小应用)
3.数据库的操作
创建库,day16
CREATE DATABASE day16 DEFAULT CHARACTER SET utf8;
使用day16这个数据库
USE day16;
查询day16这个库中的所有的表
SHOW TABLES;
创建学生表(id,name,age)
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
age INT
);
查询表中的数据
SELECT * FROM student;
查询一个表结构
DESC student;
删除student表
DROP TABLE student;
添加一个地址字段(gender varchar(2))
ALTER TABLE student ADD COLUMN gender VARCHAR(2);
修改gender字段类型为varchar(3)
ALTER TABLE student MODIFY COLUMN gender VARCHAR(3);
将gender字段修改为sex字段 varchar(2)
ALTER TABLE student CHANGE COLUMN gender sex VARCHAR(2);
添加一个地址字段
ALTER TABLE student ADD COLUMN address VARCHAR(20);
删除sex和address字段
ALTER TABLE student DROP COLUMN sex,DROP COLUMN address;
将student这个表的表名改为stu
ALTER TABLE stu RENAME TO student;
查看表数据
SELECT * FROM student;
给表中插入3条数据(插入所有字段)
INSERT INTO student VALUES(1,‘张三‘,20,‘山西‘);
INSERT INTO student VALUES(2,‘李四‘,22,‘山西‘);
INSERT INTO student VALUES(3,‘王五‘,21,‘河北‘);
给表中插入id字段和name字段
INSERT INTO student(id,NAME) VALUES(4,‘赵六‘);
将所有学生的年龄改为30岁,修改所有学生的年龄
UPDATE student SET age=30;
将id为3的学生姓名改为房祖名
UPDATE student SET NAME=‘张飞‘ WHERE id=3;
删除全表数据,本质上是一条一条进行删除的,效率比较慢
DELETE FROM student;
删除id为3的数据
DELETE FROM student WHERE id=3;
使用truncate table 表名,删除全表数据,直接将全表数据删除,效率比较快
TRUNCATE TABLE student;
查询所有列
SELECT * FROM student;
查询指定字段,查询id,name
SELECT id,NAME FROM student;
查询时指定别名,name--姓名,address--住址
SELECT NAME AS ‘姓名‘,address AS ‘住址‘ FROM student;
添加servlet,jsp字段
ALTER TABLE student ADD COLUMN servlet INT,ADD COLUMN jsp INT;
给每条学生数据添加上servlet和jsp的成绩
UPDATE student SET servlet=50,jsp=60 WHERE id=1;
UPDATE student SET servlet=60,jsp=70 WHERE id=2;
UPDATE student SET servlet=70,jsp=80 WHERE id=3;
合并servlet和jsp这两个列进行查询,查询每个学生的servlet和jsp的成绩总和
SELECT NAME ‘姓名‘,(servlet+jsp) ‘总成绩‘ FROM student;
查询你们班的学生都来自于哪里
SELECT NAME ‘姓名‘,address ‘地址‘ FROM student;
去除重复值的另一种写法
SELECT DISTINCT(address) FROM student;
查询id为1并且,并且servlet成绩等于50的学生(交集 and)
SELECT * FROM student WHERE id=1 AND servlet=50;
查询id为1或者来自中国香港的学生(并集 or)
SELECT * FROM student WHERE id=1 OR address=‘中国香港‘;
查询servlet成绩大于60分的学生
SELECT * FROM student WHERE servlet>60;
查询jsp成绩小于等于70的学生
SELECT * FROM student WHERE jsp<=70;
另一种写法
SELECT * FROM student WHERE jsp<70 OR jsp=70;
上面写法的另一种语法,between...and...包前也包后
SELECT * FROM student WHERE jsp BETWEEN 70 AND 80;
查询学生年龄不等于30岁的学生
SELECT * FROM student WHERE age<>30;
模糊查询(like),like后面跟的是符号
%任意多个字符
_一个字符
查询姓刘的学生(like ‘张%‘)
SELECT * FROM student WHERE NAME LIKE ‘张%‘;
聚合函数
查询servlet的总成绩(sum -- 求和函数)
SELECT SUM(servlet) FROM student;
查询每个学生的servlet平均分(avg,平均函数)
SELECT AVG(servlet) FROM student;
查询学生的servlet的最高成绩(max ,最大值函数)
SELECT MAX(servlet) FROM student;
求取这张学生表中有多少条数据(count(*))
效率比较低
SELECT COUNT(*) FROM student;
根据某一个字段求取学生表中的数据条数,当一个字段数值为null的时候,是不予计算的
但是这种方式求取得统计值的时候效率会更高,但是有时候数据不够准确
SELECT COUNT(age) FROM student
查询人数大于1的地域(group by 分组字段 having 筛选条件)
SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>1;
student表中目前有4条数据,分为2页显示,每页显示2条
查询第一页的显示数据:
SELECT * FROM student LIMIT 0,2;
查询第二页现实的数据
SELECT * FROM student LIMIT 2,2;
按照id字段的升序进行排序
asc,升序,数字从小到大,字母a-z
desc,降序,数字从大到小,字母z-a
SELECT * FROM student ORDER BY id DESC;
按照servlet的成绩的降序进行排序
SELECT * FROM student ORDER BY servlet DESC;
先按照学生的年龄升序进行排序,年龄相同按照学生的servelt成绩的升序进行排序
SELECT * FROM student ORDER BY age ASC,servlet ASC;
数据库入门(一)