Tự học SQL: Sao lắm loại SQL vậy? (phần 1)
Mysql, SQL SERVER, MS SQL, POSTPRESQL, ORACLE,….
Có một điều mà mình cảm thấy bối rối khi bắt đầu tim hiểu SQL ( khá lâu rồi khoảng năm 2 đại học thì phải ) thì đó chính là tại sao có tùm lum kiểu SQL vậy. Khi mở Hacker Rank lên ( 1 trang làm test SQL/ một số ngôn ngữ khác) thì khi code SQL chúng ta có vô cùng nhiều lựa chọn, mỗi cái lại có 1 cú pháp khác nhau, có cái thì đòi ” ; ” có cái thì không, lệnh từ bên này thì không nhập vào bên kia được.
Nhưng khi người ta nói làm Data, thì lại bảo ” học SQL đi “. Ơ hay, thế học SQL là học SQL nàoooo!!!!!
Để giúp các bạn không phải gặp khó khăn như vậy, mình xin chia sẻ tường tận ( tất nhiên là có giản lược ) về SQL, định nghĩa SQL và 1 chút mở rộng về định nghĩa “ngôn ngữ” để vấn đề này sáng tỏ.
SQL trước cái đã!
SQL viết tắt của Structured Query Language ( Ngôn ngữ truy vấn có cấu trúc mà hình như cái này người ta chém ra chứ ban đầu IBM đặt đại thì phải ), quá trực quan, dễ hiểu, nghe là biết dùng cho việc thống kê, tính toán rồi.
Kể từ ngày sinh ra 197x ( không nhớ rõ lắm ) đến nay, SQL đã trở thành tiêu chuẩn cho rất nhiều hệ thống khai thác dữ liệu, bigdata,… Biết SQL không sợ thiếu việc ( chỉ sợ làm việc vặt ), vì người biết SQL có thể giao tiếp được với hầu hết cơ sở dữ liệu và sử dụng các tính toán đơn giản để tạo ra báo cáo.
Vì lí do đó cho nên, khi bất kì ai muốn học data, lại có 1 bạn suggest “học SQL đi”. Thế nhưng đa số các bạn này chỉ nói đến thế, còn học SQL nào, học cụ thể ra sao, thì các bạn không nói ( =)) !??? ).
Vậy thực sự SQL là gì
Như vậy, đối với máy thì mã nhị phân là như nhau (beep boop 010101). Cho nên, điểm khác biệt duy nhất ở quá trình này đó chính là bộ máy “biên dịch”, nếu máy biên dịch có nhiều tính năng thì SQL có nhiều tính năng và ngược lại.
Các bộ máy biên dịch này đều là cấu thành của một bộ database management system. Để cạnh tranh với nhau, ở mỗi loại DBMS sẽ có khác biệt một chút về tính năng. Thêm, bớt những tính năng mà nhà sản xuất DBMS tin rằng sẽ tốt hơn. Từ điều này dẫn tới sự khác biệt về câu lệnh SQL.
Thế tại sao lại vẫn gọi là SQL, không gọi là PostgreLang/ BigqueryLanguage gì gì đó ?
Trường hợp tiếng Việt
Như các bạn có thể thấy ở biểu đồ trên, dù là người Bắc, Trung, Nam, chúng ta có một số tiếng bản địa, từ ngữ địa phương khác nhau. Tuy nhiên, xét về gốc nhìn tổng thể, tất cả khi nói chuyện với nhau đều có các điểm chung ở chính giữa. Điều này làm cho người miền bắc vẫn có thể hiểu được người miền nam và ngược lại.
Nhìn chung dù có sự khác biệt chúng ta vẫn gọi ngôn ngữ là “Tiếng Việt” chứ không phải người việt không nói tiếng việt mà nói tiếng bắc,… . Chúng ta có trường hợp tương tự cho SQL.
Trường hợp SQL
Tương tự như trường hợp tiếng Việt, trường hợp SQL cũng vậy. Dù có nhiều điểm khác nhau khi sử dụng MySQL, Postgre hay Bigquery, cả 3 ngôn ngữ SQL trên các loại DBMS này đều chia sẽ một số điểm chính ví dụ như.
SElECTdùng để lấy dữ liệuFROMdùng để chỉ định dữ liệu sẽ được lấy ra từ những bảng nào, và các bảng đó quan hệ với nhau như thế nào.WHEREdùng để xác định những bản ghi nào sẽ được lấy ra, hoặc áp dụng với GROUP BY.GROUP BYdùng để kết hợp các bản ghi có những giá trị liên quan với nhau thành các phần tử của một tập hợp nhỏ hơn các bản ghi.HAVINGdùng để xác định những bản ghi nào, là kết quả từ từ khóa GROUP BY, sẽ được lấy ra.ORDER BYdùng để xác định dữ liệu lấy ra sẽ được sắp xếp theo những cột nào.
Tuỳ lí do, mục đích sử dụng của từng loại DBMS thì nhà sản xuất sẽ bổ sung thêm các câu lệnh khác nhau ( ví dụ như postgre hỗ trợ extract json từ rất sớm, hoặc bigquery phân biệt upper lower case ). Tuy nhiên, nhìn tổng thể, một người biết SQL có thể thực hiện được một số lệnh cơ bản mà chưa cần đụng tới chi tiết của từng loại.
Vậy tự học như thế nào?
Như vậy, việc quan trọng nhất khi học tiếng Việt là học những cái căn bản của tiếng Việt. Tương tự đối với SQL, chúng ta cũng phải học những “từ” căn bản của SQL trước khi học ngôn ngữ “địa phương”. Để việc học từ căn bản dễ dàng hơn chúng ta nên chọn những bản SQL nhẹ, dễ dựng lên trong laptop và dễ convert từ file excel hay csv.
Mình suggest các bạn mới bắt đầu nên lên Kaggle tìm một bộ dữ liệu, và học cách convert nó sang SQLite, và bắt đầu học từ DBMS đơn giản này.
- Web chính thức của SQLite: https://www.sqlite.org/
- Trình kết nối vào SQLite ngay tại trình duyệt: https://sqliteonline.com/
Các bạn có thể search google để tìm hiểu thêm về các bước trên.
Kết
Có nhiều bạn sẽ thắc mắc vì sao mình không đụng tới SQL ANSI, ISO hay các quy tắt chung. Mình nghĩ viết đến đây cũng có thể đủ để giúp các bạn beginner hiểu được trừu tượng vì sao có nhiều loại SQL đến vậy. Trong các phần tiếp theo mình sẽ đi sâu hơn nữa về mặt kĩ thuật vì sao có nhiều loại SQL, thậm chí cho các cơ sở dữ liệu “noSQL”. Đón xem nhé, cảm ơn các bạn.
Xem phần tiếp theo —–> Phần 2: Các thuật ngữ Database hay gặp
Vì sao phải hiểu các khái niệm về database?
Tiếp tục với chủ đề tự học SQL hôm trước, mình có một bổ sung nhỏ mà cá nhân mình cảm thấy có thể giúp ích cho các bạn tự học.
Như các bạn biết, SQL là một ngôn ngữ dành cho Database, hệ thống dữ liệu. Như vậy, bạn muốn thực hành query dữ liệu trên SQL thì phải tự set up một SQL Database. Việc này không hề khó, cái khó nhất chính là sự bỡ ngỡ khi xắn tay áo lên làm việc này. Lí do: bạn không có tí khái niệm gì về việc này, port là cái gì? server là sao? client là gì? workbench mở rồi sao không chạy được file
—–> Bỏ cuộc (oh no no no)
May mắn thay hôm nay mình sẽ giải thích một số khái niệm để giúp việc này dễ hơn cho các bạn. Mình sẽ liệt kê chỉ một vài khái niệm thôi nhưng vô cùng cốt lõi, giúp bạn tiết kiệm thời gian tự học đáng kể.
Các khái niệm thường gặp
Client và Server
Việc khó khăn đầu tiên khi bạn cố gắng tải từ internet về “phần mềm MySQL/ PostgreSQL/….” đó chính là khi bạn tải các “phần mềm” này về, nó chả có giao diện gì cả, dùng theo hướng dẫn thì toàn là gõ lệnh bên trong một cái màn hình gõ lệnh đen xì, nhìn có vẻ không giống với những hướng dẫn trên mạng (Giao diện đẹp đẽ, nhiều tính năng).
Lí do là vì bạn đang sử dụng phần mềm dành cho SERVER . Giao diện của phần mềm dành cho Server rất hạn chế, vì phần mềm cho Server chủ yếu để nhận lệnh từ bên ngoài vào, lưu dữ liệu lại, và chỉ có giao diện CLI (Giao diện gõ lệnh) cho trường hợp khẩn cấp nếu người quản trị server cần dùng.
Để điều khiển cái database này, chúng ta không nên sử dụng trực tiếp CLI, mà nên kết nối với nó từ bên ngoài bằng một phần mềm gọi là CLIENT.
Client sẽ kết nối với phần mềm Server ( Đại khái thế haha ), và sẽ chỉ cho phần mềm server này phải làm gì, nhập lệnh vào đâu, với giao diện đẹp đẽ chứ không chỉ toàn câu lệnh. Client trông tương tự như bên dưới, với cấu trúc server bên trái, dữ liệu bên phải, và đôi khi có nơi nhập lệnh.
Khoan!
Vậy khi chúng ta nói các loại SQL như MySQL, PostgreSQL, SQL Server,… chúng ta đang nói đến loại phần mềm nào?
Khi chúng ta nói các loại SQL đó chúng ta đang nói đến phần Server, không phải client. Cho nên khi bạn tải Client, bạn sẽ thấy tên của các Client SQL chả liên quan gì đến những tên tuổi ở trên cả. Cụ thể mình lấy ví dụ một SQL Client bên dưới tên là DBeaver .
DBeaver hỗ trợ các database dùng JDBC. Do MySQL cũng dùng JDBC -> DBeaver kết nối được với MySQL.
Như vậy chúng ta có học MySQL như sau: DBeaver SQL Client ——–connect ——> MySQL Server. Viết SQL trên DBeaver, không phải phần mềm server nhé. Ngoài DBeaver còn nhiều phần mềm nổi tiếng nữa mình xin liệt kê một số ví dụ:
- DBeaver: https://dbeaver.io/
- Workbench: https://www.mysql.com/products/workbench/
- Online SQL client (Không cần tải): https://sqliteonline.com/
Address, IP và Port
Address và IP
Ba khái niệm này có vẻ quen thuộc, vì hiện nay chúng ta đều sử dụng internet và quen thuộc với địa chỉ web, ip, có port có thể có 1 tí xa lạ.
Chúng ta sẽ nói tới Address và IP trước nhé. Như các bạn có thể thấy, address chính là địa chỉ của server.
Nhưng IP cũng là …”địa chỉ” của server vậy khi nào là address khi nào là IP.
Khi bạn nhập địa một trang web vào, ví dụ tuananalytic.com bạn sẽ được trỏ về IP của website , mình chưa check nên ví dụ thôi nhé: tuananalytic.com —> 111.111.111.111
Như vậy, có thể cơ bản nói address hay IP là tương tự nhau, chỉ đơn giản là address nhìn đẹp hơn, và cuối cùng sẽ trả về IP cho bạn truy cập.
Vậy còn port
Giả sử như bạn truy cập vào một IP, nó giống như bạn đi vào một căn nhà có nhiều phòng, mỗi phòng này chúng ta gọi là một port.
Chúng ta có rất nhiều port trong căn phòng IP này, tuy nhiên không phải phòng nào cũng mở khoá, bạn chỉ có thể vào được căn phòng nào mà không khoá thôi. Ví dụ trong hình trên, chúng ta có căn nhà 111.111.111.111 chỉ mở phòng port 80, còn khi chúng ta có vào phòng port 900, sẽ không vào được.
Vậy nó liên quan gì database
Khi các bạn cài đặt một SQL server, phần mềm sẽ hỏi bạn bạn muốn chạy trên port nào ( IP chính là IP của máy bạn chạy phần mềm – nếu như bạn dùng server). Bạn sẽ chọn port bạn muốn server bạn chạy ( đặt SQL server của bạn vào căn phòng port như trong ví dụ phía trên).
Khi bạn sử dụng SQL Client, bạn có thể điền thông tin của Server với một số gợi ý sau:
- Nếu Server chạy trong máy của bạn (không phải máy khác ): Address = localhost ( Port thì do bạn tự set up server nên phải biết )
- Nếu Server được một người khác chạy: Hỏi người này có address hay IP không, và họ đang mở port nào .
Kết
Dù chỉ là một số khái niệm đơn giản, bạn có thể tiết kiệm được rất nhiều thời gian cho việc đi lanh quanh tìm hiểu. Mình mong có thể giúp đỡ một số bạn đang bắt đầu học SQL mà vẫn còn bỡ ngỡ bởi các khái niệm này.
Sau khi bạn đã hiểu được sự tách bạch của Client và Server cũng như cơ bản về IP và port, bạn có thể hoàn toàn tự tin set up một sql server trong máy, tải một client về và bắt đầu học sql thôi !
Các bạn đón đọc Phần 3: Hướng dẫn set up một sqlite server đơn giản nhé.
Cảm ơn các bạn.

.png)



0 Comments