數據庫入門(一)
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;
數據庫入門(一)